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 /* This test case checks more than standard compliance. An 19 implementation may provide this service but it is not required to 20 do so. */ 21 22 #include <errno.h> 23 #include <pthread.h> 24 #include <stdio.h> 25 26 27 static int do_test(void)28do_test (void) 29 { 30 pthread_rwlock_t r; 31 int e; 32 33 if (pthread_rwlock_init (&r, NULL) != 0) 34 { 35 puts ("rwlock_init failed"); 36 return 1; 37 } 38 puts ("rwlock_init succeeded"); 39 40 if (pthread_rwlock_trywrlock (&r) != 0) 41 { 42 puts ("rwlock_trywrlock on unlocked rwlock failed"); 43 return 1; 44 } 45 puts ("rwlock_trywrlock on unlocked rwlock succeeded"); 46 47 e = pthread_rwlock_rdlock (&r); 48 if (e == 0) 49 { 50 puts ("rwlock_rdlock on rwlock with writer succeeded"); 51 return 1; 52 } 53 if (e != EDEADLK) 54 { 55 puts ("rwlock_rdlock on rwlock with writer failed != EDEADLK"); 56 return 1; 57 } 58 puts ("rwlock_rdlock on rwlock with writer failed with EDEADLK"); 59 60 e = pthread_rwlock_wrlock (&r); 61 if (e == 0) 62 { 63 puts ("rwlock_wrlock on rwlock with writer succeeded"); 64 return 1; 65 } 66 if (e != EDEADLK) 67 { 68 puts ("rwlock_wrlock on rwlock with writer failed != EDEADLK"); 69 return 1; 70 } 71 puts ("rwlock_wrlock on rwlock with writer failed with EDEADLK"); 72 73 if (pthread_rwlock_unlock (&r) != 0) 74 { 75 puts ("rwlock_unlock failed"); 76 return 1; 77 } 78 puts ("rwlock_unlock succeeded"); 79 80 if (pthread_rwlock_destroy (&r) != 0) 81 { 82 puts ("rwlock_destroy failed"); 83 return 1; 84 } 85 puts ("rwlock_destroy succeeded"); 86 87 return 0; 88 } 89 90 #define TEST_FUNCTION do_test () 91 #include "../test-skeleton.c" 92