1/* This testcase is part of GDB, the GNU debugger. 2 3 Copyright 2010-2023 Free Software Foundation, Inc. 4 5 This program is free software; you can redistribute it and/or modify 6 it under the terms of the GNU General Public License as published by 7 the Free Software Foundation; either version 3 of the License, or 8 (at your option) any later version. 9 10 This program is distributed in the hope that it will be useful, 11 but WITHOUT ANY WARRANTY; without even the implied warranty of 12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 GNU General Public License for more details. 14 15 You should have received a copy of the GNU General Public License 16 along with this program. If not, see <http://www.gnu.org/licenses/>. */ 17 18#include <stdio.h> 19#include <pthread.h> 20#include <unistd.h> 21#include <signal.h> 22 23pthread_t thread2_id; 24pthread_t thread3_id; 25 26void* thread3 (void* d) 27{ 28 raise (SIGUSR1); 29 30 return NULL; 31} 32 33void* thread2 (void* d) 34{ 35 /* Do not quit thread3 asynchronously wrt thread2 stop - wait first on 36 thread3_id to stop. It would complicate testcase reception of the 37 events. */ 38 39 pthread_create (&thread3_id, NULL, thread3, NULL); pthread_join (thread3_id, NULL); 40 41 return NULL; 42} 43 44int main (void) 45{ 46 /* Use single line to not to race whether `thread2' breakpoint or `next' over 47 pthread_create will stop first. */ 48 49 pthread_create (&thread2_id, NULL, thread2, NULL); pthread_join (thread2_id, NULL); 50 51 return 12; 52} 53