diff options
author | Doug Evans <dje@google.com> | 2009-04-27 15:38:43 +0000 |
---|---|---|
committer | Doug Evans <dje@google.com> | 2009-04-27 15:38:43 +0000 |
commit | b92b73c2f6ad8b32a231a63412da77d230f0a6d6 (patch) | |
tree | d84a2db7ebde78bdb4bbab6a0d9b45c9b27dcb43 /gdb/testsuite/gdb.threads/watchthreads.c | |
parent | c067354b06cc372b318bbbc5ee5098ec6ef87bc1 (diff) | |
download | gdb-b92b73c2f6ad8b32a231a63412da77d230f0a6d6.zip gdb-b92b73c2f6ad8b32a231a63412da77d230f0a6d6.tar.gz gdb-b92b73c2f6ad8b32a231a63412da77d230f0a6d6.tar.bz2 |
* gdb.threads/watchthreads.c (main): Initialize args before starting
the threads. Plus formatting cleanup.
* gdb.threads/watchthreads.exp: Avoid errant failures due to
biased scheduling of one thread.
Diffstat (limited to 'gdb/testsuite/gdb.threads/watchthreads.c')
-rw-r--r-- | gdb/testsuite/gdb.threads/watchthreads.c | 35 |
1 files changed, 25 insertions, 10 deletions
diff --git a/gdb/testsuite/gdb.threads/watchthreads.c b/gdb/testsuite/gdb.threads/watchthreads.c index 16d3ce3..7a51f57 100644 --- a/gdb/testsuite/gdb.threads/watchthreads.c +++ b/gdb/testsuite/gdb.threads/watchthreads.c @@ -22,34 +22,49 @@ #include <stdlib.h> #include <pthread.h> -void *thread_function(void *arg); /* Pointer to function executed by each thread */ +void *thread_function (void *arg); /* Function executed by each thread. */ #define NUM 5 unsigned int args[NUM+1]; -int main() { +int +main () +{ int res; pthread_t threads[NUM]; void *thread_result; long i; + /* To keep the test determinative, initialize args first, + then start all the threads. Otherwise, the way watchthreads.exp + is written, we have to worry about things like threads[0] getting + to 29 hits of args[0] before args[1] gets changed. */ + + for (i = 0; i < NUM; i++) + { + /* The call to usleep is so that when the watchpoint triggers, + the pc is still on the same line. */ + args[i] = 1; usleep (1); /* Init value. */ + } + for (i = 0; i < NUM; i++) { - args[i] = 1; /* Init value. */ - res = pthread_create(&threads[i], - NULL, - thread_function, - (void *) i); + res = pthread_create (&threads[i], + NULL, + thread_function, + (void *) i); } args[i] = 1; thread_function ((void *) i); - exit(EXIT_SUCCESS); + exit (EXIT_SUCCESS); } -void *thread_function(void *arg) { +void * +thread_function (void *arg) +{ int my_number = (long) arg; int *myp = (int *) &args[my_number]; @@ -59,6 +74,6 @@ void *thread_function(void *arg) { (*myp) ++; usleep (1); /* Loop increment. */ } - pthread_exit(NULL); + pthread_exit (NULL); } |