* 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