mirror of
https://sourceware.org/git/binutils-gdb.git
synced 2025-02-05 12:53:16 +08:00
testsuite: Fix race condition in check-libthread-db
It is possible for the created thread to reach the breakpoint before the main thread has set errno to 23. Prevent this using a pthread barrier. * gdb.threads/check-libthread-db.c (thread_routine): Use a pthread barrier. (main): Likewise.
This commit is contained in:
parent
115d0c1443
commit
9fc3183f0f
@ -1,3 +1,9 @@
|
||||
2018-09-27 Alan Hayward <alan.hayward@arm.com>
|
||||
|
||||
* gdb.threads/check-libthread-db.c (thread_routine): Use a
|
||||
pthread barrier.
|
||||
(main): Likewise.
|
||||
|
||||
2018-09-26 Andrew Burgess <andrew.burgess@embecosm.com>
|
||||
|
||||
* gdb.base/large-frame-1.c: New file.
|
||||
|
@ -23,6 +23,10 @@
|
||||
#include <pthread.h>
|
||||
#include <errno.h>
|
||||
|
||||
/* This barrier ensures we only reach the initial breakpoint after both threads
|
||||
have set errno. */
|
||||
pthread_barrier_t start_threads_barrier;
|
||||
|
||||
static void
|
||||
break_here (void)
|
||||
{
|
||||
@ -32,6 +36,7 @@ static void *
|
||||
thread_routine (void *arg)
|
||||
{
|
||||
errno = 42;
|
||||
pthread_barrier_wait (&start_threads_barrier);
|
||||
|
||||
break_here ();
|
||||
|
||||
@ -47,6 +52,8 @@ main (int argc, char *argv)
|
||||
pthread_t the_thread;
|
||||
int err;
|
||||
|
||||
pthread_barrier_init (&start_threads_barrier, NULL, 2);
|
||||
|
||||
err = pthread_create (&the_thread, NULL, thread_routine, NULL);
|
||||
if (err != 0)
|
||||
{
|
||||
@ -55,6 +62,7 @@ main (int argc, char *argv)
|
||||
}
|
||||
|
||||
errno = 23;
|
||||
pthread_barrier_wait (&start_threads_barrier);
|
||||
|
||||
err = pthread_join (the_thread, NULL);
|
||||
if (err != 0)
|
||||
|
Loading…
Reference in New Issue
Block a user