mirror of
https://sourceware.org/git/binutils-gdb.git
synced 2024-12-15 04:31:49 +08:00
9e8f9b05ad
Add a new test for PR 20039. The test spawns new threads, then tries to
interrupt, continue, and interrupt again. This use case was fixed by
commit 5fe966540d
in master, but gdb 7.11
is affected (so if you try it on the gdb-7.11-branch right now, the test
will fail).
New in v2, the test now handles mi-async on mode properly. The failure
was specific to mi-async off, but I don't think it's bad to test the
same thing under async on mode. I added a little hack when running in
async mode to work around bug 20045.
I also removed one continue/interrupt pair, as a single one was enough to
trigger the problem.
gdb/testsuite/ChangeLog:
* gdb.mi/mi-threads-interrupt.c: New file.
* gdb.mi/mi-threads-interrupt.exp: New file.
62 lines
1.4 KiB
C
62 lines
1.4 KiB
C
/* This testcase is part of GDB, the GNU debugger.
|
|
|
|
Copyright 2016 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
|
|
the Free Software Foundation; either version 3 of the License, or
|
|
(at your option) any later version.
|
|
|
|
This program is distributed in the hope that it will be useful,
|
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
GNU General Public License for more details.
|
|
|
|
You should have received a copy of the GNU General Public License
|
|
along with this program. If not, see <http://www.gnu.org/licenses/>. */
|
|
|
|
#include <pthread.h>
|
|
#include <unistd.h>
|
|
|
|
#define NUM_THREADS 2
|
|
|
|
static pthread_barrier_t barrier;
|
|
|
|
static void *
|
|
thread_func (void *v)
|
|
{
|
|
int i;
|
|
|
|
pthread_barrier_wait (&barrier);
|
|
|
|
for (i = 0; i < 100; i++)
|
|
sleep (1);
|
|
}
|
|
|
|
static void
|
|
all_threads_created (void)
|
|
{
|
|
}
|
|
|
|
int
|
|
main (void)
|
|
{
|
|
int i;
|
|
pthread_t threads[NUM_THREADS];
|
|
|
|
/* +1 to account for the main thread */
|
|
pthread_barrier_init (&barrier, NULL, NUM_THREADS + 1);
|
|
|
|
for (i = 0; i < NUM_THREADS; i++)
|
|
pthread_create (&threads[i], NULL, thread_func, NULL);
|
|
|
|
pthread_barrier_wait (&barrier);
|
|
|
|
all_threads_created ();
|
|
|
|
for (i = 0; i < 100; i++)
|
|
sleep (1);
|
|
|
|
return 0;
|
|
}
|