1 /* Copyright (C) 2002-2022 Free Software Foundation, Inc. 2 This file is part of the GNU C Library. 3 4 The GNU C Library is free software; you can redistribute it and/or 5 modify it under the terms of the GNU Lesser General Public 6 License as published by the Free Software Foundation; either 7 version 2.1 of the License, or (at your option) any later version. 8 9 The GNU C Library is distributed in the hope that it will be useful, 10 but WITHOUT ANY WARRANTY; without even the implied warranty of 11 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 12 Lesser General Public License for more details. 13 14 You should have received a copy of the GNU Lesser General Public 15 License along with the GNU C Library; if not, see 16 <https://www.gnu.org/licenses/>. */ 17 18 #include <pthread.h> 19 #include <signal.h> 20 #include <stdio.h> 21 #include <unistd.h> 22 #include <errno.h> 23 #include <stdbool.h> 24 25 #ifndef TEST_FUNCTION 26 static int do_test (void); 27 # define TEST_FUNCTION do_test () 28 #endif 29 #include "../test-skeleton.c" 30 31 #ifndef ATTR 32 pthread_mutexattr_t *attr; 33 # define ATTR attr 34 #endif 35 36 #ifndef ATTR_NULL 37 # define ATTR_NULL (ATTR == NULL) 38 #endif 39 40 static int do_test(void)41do_test (void) 42 { 43 pthread_mutex_t m; 44 45 int e = pthread_mutex_init (&m, ATTR); 46 if (!ATTR_NULL && e == ENOTSUP) 47 { 48 puts ("cannot support selected type of mutexes"); 49 e = pthread_mutex_init (&m, NULL); 50 } 51 if (e != 0) 52 { 53 puts ("mutex_init failed"); 54 return 1; 55 } 56 57 if (!ATTR_NULL && pthread_mutexattr_destroy (ATTR) != 0) 58 { 59 puts ("mutexattr_destroy failed"); 60 return 1; 61 } 62 63 if (pthread_mutex_lock (&m) != 0) 64 { 65 puts ("1st mutex_lock failed"); 66 return 1; 67 } 68 69 delayed_exit (1); 70 /* This call should never return. */ 71 xpthread_mutex_lock (&m); 72 73 puts ("2nd mutex_lock returned"); 74 return 1; 75 } 76