1/* This testcase is part of GDB, the GNU debugger. 2 3 Copyright 2023-2024 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 <pthread.h> 19#include <sys/time.h> 20#include <unistd.h> 21#include <assert.h> 22 23static pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER; 24static pthread_cond_t cond = PTHREAD_COND_INITIALIZER; 25 26static void *fun(void *arg) 27{ 28 struct timeval now; 29 struct timespec until; 30 int err; 31 32 err = gettimeofday(&now, NULL); 33 assert(!err); 34 35 until.tv_sec = now.tv_sec + 60; 36 until.tv_nsec = now.tv_usec * 1000UL; 37 38 pthread_cond_timedwait(&cond, &mutex, &until); 39 assert(0); 40 err = pthread_mutex_unlock(&mutex); 41 assert(!err); 42 43 return arg; 44} 45 46void breakhere() 47{ 48} 49 50int main() 51{ 52 pthread_t thread; 53 void *ret; 54 int err; 55 56 err = pthread_mutex_lock(&mutex); 57 assert(!err); 58 err = pthread_create(&thread, NULL, fun, NULL); 59 assert(!err); 60 err = pthread_mutex_lock(&mutex); 61 assert(!err); 62 breakhere(); 63 err = pthread_join(thread, &ret); 64 assert(0); 65 66 return 0; 67} 68