* Sebastien Dugue <[EMAIL PROTECTED]> [2008-02-27 14:37:28]:

> 
>   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;

Ack, Suprisingly I missed that.
Don't know what I am smoking today ;)

Here is the patch that fixes it.

Signed-Off-By: Chirag <[EMAIL PROTECTED]>

tc-2.c |   28 +++++++++++-----------------
1 file changed, 11 insertions(+), 17 deletions(-)


diff --git a/testcases/realtime/func/thread_clock/tc-2.c 
b/testcases/realtime/func/thread_clock/tc-2.c
index a21de96..56bc7b1 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 =(int)(long)pthr->arg;
        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 = (int)(long)pthr->arg;
        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