diff options
-rw-r--r-- | gdb/testsuite/ChangeLog | 7 | ||||
-rw-r--r-- | gdb/testsuite/gdb.threads/fork-thread-pending.c | 8 |
2 files changed, 15 insertions, 0 deletions
diff --git a/gdb/testsuite/ChangeLog b/gdb/testsuite/ChangeLog index 9b540e4..9dcc359 100644 --- a/gdb/testsuite/ChangeLog +++ b/gdb/testsuite/ChangeLog @@ -1,5 +1,12 @@ 2011-12-26 Jan Kratochvil <jan.kratochvil@redhat.com> + Fix racy FAILs. + * gdb.threads/fork-thread-pending.c (barrier): New variable. + (thread_function, thread_forker): Call pthread_barrier_wait for it. + (main): Call pthread_barrier_init for it. + +2011-12-26 Jan Kratochvil <jan.kratochvil@redhat.com> + Fix double send_gdb leading to racy FAILs. * gdb.base/break.exp (set silent break bp_location1): Replace 3x send_gdb and gdb_expect by gdb_test. diff --git a/gdb/testsuite/gdb.threads/fork-thread-pending.c b/gdb/testsuite/gdb.threads/fork-thread-pending.c index bc9026c..d2ced96 100644 --- a/gdb/testsuite/gdb.threads/fork-thread-pending.c +++ b/gdb/testsuite/gdb.threads/fork-thread-pending.c @@ -28,6 +28,7 @@ #define NUMTHREADS 10 volatile int done = 0; +static pthread_barrier_t barrier; static void * start (void *arg) @@ -45,6 +46,8 @@ thread_function (void *arg) printf ("Thread <%d> executing\n", x); + pthread_barrier_wait (&barrier); + while (!done) usleep (100); @@ -62,6 +65,8 @@ thread_forker (void *arg) printf ("Thread forker <%d> executing\n", x); + pthread_barrier_wait (&barrier); + switch ((pid = fork ())) { case -1: @@ -89,6 +94,9 @@ main (void) int args[NUMTHREADS]; int i, j; + i = pthread_barrier_init (&barrier, NULL, NUMTHREADS); + assert (i == 0); + /* Create a few threads that do mostly nothing, and then one that forks. */ for (j = 0; j < NUMTHREADS - 1; ++j) |