summaryrefslogtreecommitdiff
path: root/gdb/testsuite/gdb.threads
diff options
context:
space:
mode:
authorJim Blandy <jimb@codesourcery.com>2008-01-29 19:20:52 +0000
committerJim Blandy <jimb@codesourcery.com>2008-01-29 19:20:52 +0000
commit4bf0f49d317e5085cc985264301019fcb83e6aa0 (patch)
tree04001b2c6c6325798a9fa7bd8820721787f81d5d /gdb/testsuite/gdb.threads
parent4cc370b0c9cfa8532cda11e42a0b4aa9c9bbf27f (diff)
downloadgdb-4bf0f49d317e5085cc985264301019fcb83e6aa0.tar.gz
* gdb.threads/sigthread.c: Use barriers to ensure that
child_thread and child_thread_two are always initialized before we start to use them.
Diffstat (limited to 'gdb/testsuite/gdb.threads')
-rw-r--r--gdb/testsuite/gdb.threads/sigthread.c10
1 files changed, 10 insertions, 0 deletions
diff --git a/gdb/testsuite/gdb.threads/sigthread.c b/gdb/testsuite/gdb.threads/sigthread.c
index 131d96a848e..b5233bc9bc8 100644
--- a/gdb/testsuite/gdb.threads/sigthread.c
+++ b/gdb/testsuite/gdb.threads/sigthread.c
@@ -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);