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 <stdio.h> 20 #include <errno.h> 21 #include <stdbool.h> 22 #include <libc-diag.h> 23 24 #ifndef ATTR 25 # define ATTR NULL 26 # define ATTR_NULL true 27 #endif 28 29 30 static int do_test(void)31do_test (void) 32 { 33 pthread_mutex_t m; 34 35 int e = pthread_mutex_init (&m, ATTR); 36 if (!ATTR_NULL && e == ENOTSUP) 37 { 38 puts ("cannot support selected type of mutexes"); 39 return 0; 40 } 41 else if (e != 0) 42 { 43 puts ("mutex_init failed"); 44 return 1; 45 } 46 47 /* This deliberately tests supplying a null pointer to a function whose 48 argument is marked __attribute__ ((nonnull)). */ 49 DIAG_PUSH_NEEDS_COMMENT; 50 DIAG_IGNORE_NEEDS_COMMENT (5, "-Wnonnull"); 51 if (!ATTR_NULL && pthread_mutexattr_destroy (ATTR) != 0) 52 { 53 puts ("mutexattr_destroy failed"); 54 return 1; 55 } 56 DIAG_POP_NEEDS_COMMENT; 57 58 if (pthread_mutex_lock (&m) != 0) 59 { 60 puts ("mutex_lock failed"); 61 return 1; 62 } 63 64 if (pthread_mutex_unlock (&m) != 0) 65 { 66 puts ("mutex_unlock failed"); 67 return 1; 68 } 69 70 if (pthread_mutex_destroy (&m) != 0) 71 { 72 puts ("mutex_destroy failed"); 73 return 1; 74 } 75 76 return 0; 77 } 78 79 #ifndef TEST_FUNCTION 80 # define TEST_FUNCTION do_test () 81 #endif 82 #include "../test-skeleton.c" 83