* gdb.threads/sigthread.c: Use barriers to ensure that
authorJim Blandy <jimb@codesourcery.com>
Tue, 29 Jan 2008 19:20:52 +0000 (19:20 +0000)
committerJim Blandy <jimb@codesourcery.com>
Tue, 29 Jan 2008 19:20:52 +0000 (19:20 +0000)
child_thread and child_thread_two are always initialized before we
start to use them.

gdb/testsuite/ChangeLog
gdb/testsuite/gdb.threads/sigthread.c

index a5d5920..55e0bc8 100644 (file)
@@ -1,3 +1,9 @@
+2008-01-29  Jim Blandy  <jimb@red-bean.com>
+
+       * gdb.threads/sigthread.c: Use barriers to ensure that
+       child_thread and child_thread_two are always initialized before we
+       start to use them.
+
 2008-01-29  Vladimir Prus  <vladimir@codesourcery.com>
 
        * gdb.base/watchpoint-solib.exp: New.
index 131d96a..b5233bc 100644 (file)
@@ -20,6 +20,8 @@
    testing.  */
 #define NSIGS 10000000
 
+pthread_barrier_t barrier;
+
 void
 handler (int sig)
 {
@@ -34,6 +36,8 @@ child_two (void *arg)
 {
   int i;
 
+  pthread_barrier_wait (&barrier);
+
   for (i = 0; i < NSIGS; i++)
     pthread_kill (child_thread, SIGUSR1);
 }
@@ -43,6 +47,8 @@ thread_function (void *arg)
 {
   int i;
 
+  pthread_barrier_wait (&barrier);
+
   for (i = 0; i < NSIGS; i++)
     pthread_kill (child_thread_two, SIGUSR2);
 }
@@ -54,10 +60,14 @@ int main()
   signal (SIGUSR1, handler);
   signal (SIGUSR2, handler);
 
+  pthread_barrier_init (&barrier, NULL, 3);
+
   main_thread = pthread_self ();
   pthread_create (&child_thread, NULL, thread_function, NULL);
   pthread_create (&child_thread_two, NULL, child_two, NULL);
 
+  pthread_barrier_wait (&barrier);
+
   for (i = 0; i < NSIGS; i++)
     pthread_kill (child_thread_two, SIGUSR1);