diff options
Diffstat (limited to 'gdb/testsuite/gdb.threads/signal-sigtrap.c')
-rw-r--r-- | gdb/testsuite/gdb.threads/signal-sigtrap.c | 17 |
1 files changed, 16 insertions, 1 deletions
diff --git a/gdb/testsuite/gdb.threads/signal-sigtrap.c b/gdb/testsuite/gdb.threads/signal-sigtrap.c index 24625ba..7c903a1 100644 --- a/gdb/testsuite/gdb.threads/signal-sigtrap.c +++ b/gdb/testsuite/gdb.threads/signal-sigtrap.c @@ -20,6 +20,8 @@ #include <pthread.h> #include <signal.h> +static pthread_barrier_t barrier; + void sigtrap_handler (int sig) { @@ -31,6 +33,13 @@ thread_function (void *arg) return NULL; } +void * +thread_function_sync (void *arg) +{ + pthread_barrier_wait (&barrier); + return thread_function (arg); +} + int main (void) { @@ -38,7 +47,13 @@ main (void) signal (SIGTRAP, sigtrap_handler); - pthread_create (&child_thread, NULL, thread_function, NULL); + pthread_barrier_init (&barrier, NULL, 2); + + pthread_create (&child_thread, NULL, thread_function_sync, NULL); + + /* Make sure that pthread_create is done once the breakpoint on + thread_function triggers. */ + pthread_barrier_wait (&barrier); pthread_join (child_thread, NULL); |