X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=gdb%2Ftestsuite%2Fgdb.threads%2Fwatchthreads-reorder.c;h=b28a0dea827caa4da8ceddbdb62362f466135f22;hb=003ea5a89ab7e9eaa65cb158a953d63dac2612c6;hp=315104a8a5edec5bddd54b2a54dfd4ce785c33cf;hpb=a0eaec95753c0f093f5cb80080ef423030d35edd;p=platform%2Fupstream%2Fgdb.git diff --git a/gdb/testsuite/gdb.threads/watchthreads-reorder.c b/gdb/testsuite/gdb.threads/watchthreads-reorder.c index 315104a..b28a0de 100644 --- a/gdb/testsuite/gdb.threads/watchthreads-reorder.c +++ b/gdb/testsuite/gdb.threads/watchthreads-reorder.c @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2009-2014 Free Software Foundation, Inc. + Copyright 2009-2015 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -44,6 +44,8 @@ static pthread_mutex_t thread2_tid_mutex = PTHREAD_ERRORCHECK_MUTEX_INITIALIZER_ static pthread_mutex_t terminate_mutex = PTHREAD_ERRORCHECK_MUTEX_INITIALIZER_NP; +static pthread_barrier_t threads_started_barrier; + /* These variables must have lower in-memory addresses than thread1_rwatch and thread2_rwatch so that they take their watchpoint slots. */ @@ -87,6 +89,8 @@ thread1_func (void *unused) int i; volatile int rwatch_store; + pthread_barrier_wait (&threads_started_barrier); + timed_mutex_lock (&thread1_tid_mutex); /* THREAD1_TID_MUTEX must be already locked to avoid race. */ @@ -113,6 +117,8 @@ thread2_func (void *unused) int i; volatile int rwatch_store; + pthread_barrier_wait (&threads_started_barrier); + timed_mutex_lock (&thread2_tid_mutex); /* THREAD2_TID_MUTEX must be already locked to avoid race. */ @@ -279,6 +285,8 @@ main (int argc, char **argv) timed_mutex_lock (&terminate_mutex); + pthread_barrier_init (&threads_started_barrier, NULL, 3); + i = pthread_create (&thread1, NULL, thread1_func, NULL); assert (i == 0); @@ -305,6 +313,11 @@ main (int argc, char **argv) atexit (cleanup); + /* Wait until all threads are seen running. On Linux (at least), + new threads start stopped, and the debugger must resume them. + Need to wait for that before stopping GDB. */ + pthread_barrier_wait (&threads_started_barrier); + printf ("Stopping GDB PID %lu.\n", (unsigned long) tracer); if (tracer)