Hi Chirag,

  your patch subtly breaks the test in that when using the create_xx_thread()
functions, the pthr->id member is derived from the global atomic counter
_thread_count and is not the tread function argument passed to 
create_xx_thread().

  For example, with your patch, we have the following:

  
Sleeper thread 0 sleeping
Sleeper thread 1 sleeping
Sleeper thread 2 sleeping
Sleeper thread 3 sleeping
Sleeper thread 4 sleeping

Worker thread 5 working
Worker thread 6 working

  Therefore you cannot use pthr->id as an index into the sleepts[] and
workts[] arrays.

  One way is to use instead:

        int tid = (int)(long)pthr->arg;

in place of

        int tid = pthr->id;


  Sebastien.

On Wed, 27 Feb 2008 17:40:46 +0530 Chirag Jog <[EMAIL PROTECTED]> wrote:

> 
> Hi Sebastien,
>    Patch for tc-2 also redone
> 
> 
> Signed-Off-By: Chirag <[EMAIL PROTECTED]>
> 
> diff --git a/testcases/realtime/func/thread_clock/tc-2.c 
> b/testcases/realtime/func/thread_clock/tc-2.c
> index a21de96..a6210f7 100644
> --- a/testcases/realtime/func/thread_clock/tc-2.c
> +++ b/testcases/realtime/func/thread_clock/tc-2.c
> @@ -54,12 +54,11 @@
>  
>  #define NS_PER_SEC 1000000000
>  #define THRESHOLD 0.5  /* 500 milliseconds */
> -
>  #define NUMSLEEP 5
>  #define NUMWORK 2
> +
>  struct timespec sleepts[NUMSLEEP];
>  struct timespec workts[NUMWORK];
> -
>  static int run_jvmsim=0;
>  
>  void usage(void)
> @@ -99,7 +98,8 @@ void work(void)
>  
>  void *workerthread(void *arg)
>  {
> -     int tid = (intptr_t)arg;
> +     struct thread* pthr = (struct thread* )arg;
> +     int tid = pthr->id;
>       struct timespec *ts = &workts[tid];
>  
>  #ifdef DEBUG
> @@ -121,7 +121,8 @@ void *workerthread(void *arg)
>  
>  void *sleeperthread(void *arg)
>  {
> -     int tid = (intptr_t)arg;
> +     struct thread* pthr = (struct thread* )arg;
> +     int tid = pthr->id;
>       struct timespec *ts = &sleepts[tid];
>  
>  #ifdef DEBUG
> @@ -173,13 +174,14 @@ int checkresult(float proctime)
>               printf("FAIL\n");
>               retval = 1;
>       }
> -     printf("PASS\n");
> +     else {
> +             printf("PASS\n");
> +     }
>       return retval;
>  }
>  
>  int main(int argc,char* argv[])
>  {
> -     pthread_t sleepthr[NUMSLEEP], workthr[NUMWORK];
>       int i, retval = 0;
>       struct timespec myts;
>       setup();
> @@ -195,8 +197,7 @@ int main(int argc,char* argv[])
>  
>       /* Start sleeper threads */
>       for (i=0; i<NUMSLEEP; i++) {
> -             if ((pthread_create (&sleepthr[i], NULL, sleeperthread, (void 
> *)(intptr_t)i)) < 0 ) {
> -                     perror("pthread_create: ");
> +             if ((create_other_thread (sleeperthread, (void *)(intptr_t)i)) 
> < 0 ) {
>                       exit(1);
>               }
>       }
> @@ -204,8 +205,7 @@ int main(int argc,char* argv[])
>  
>       /* Start worker threads */
>       for (i=0; i<NUMWORK; i++) {
> -             if ((pthread_create (&workthr[i], NULL, workerthread, (void 
> *)(intptr_t)i)) < 0 ) {
> -                     perror("pthread_create: ");
> +             if ((create_other_thread (workerthread, (void *)(intptr_t)i)) < 
> 0 ) {
>                       exit(1);
>               }
>       }
> @@ -213,13 +213,7 @@ int main(int argc,char* argv[])
>  
>       printf("\nPlease wait...\n\n");
>  
> -     for (i=0; i<NUMSLEEP; i++) {
> -             pthread_join(sleepthr[i], NULL);
> -     }
> -     for (i=0; i<NUMWORK; i++) {
> -             pthread_join(workthr[i], NULL);
> -     }
> -
> +     join_threads();
>       /* Get the process cpu clock value */
>       if ((clock_gettime (CLOCK_PROCESS_CPUTIME_ID, &myts)) < 0) {
>               perror("clock_gettime: CLOCK_PROCESS_CPUTIME_ID: ");
> -- 
> Cheers,
> Chirag Jog
> 
> 

-------------------------------------------------------------------------
This SF.net email is sponsored by: Microsoft
Defy all challenges. Microsoft(R) Visual Studio 2008.
http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/
_______________________________________________
Ltp-list mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/ltp-list

Reply via email to