Initial revision
[kopensolaris-gnu/glibc.git] / nptl / tst-rwlock1.c
1 /* Copyright (C) 2002 Free Software Foundation, Inc.
2    This file is part of the GNU C Library.
3    Contributed by Ulrich Drepper <drepper@redhat.com>, 2002.
4
5    The GNU C Library is free software; you can redistribute it and/or
6    modify it under the terms of the GNU Lesser General Public
7    License as published by the Free Software Foundation; either
8    version 2.1 of the License, or (at your option) any later version.
9
10    The GNU C Library 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 GNU
13    Lesser General Public License for more details.
14
15    You should have received a copy of the GNU Lesser General Public
16    License along with the GNU C Library; if not, write to the Free
17    Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
18    02111-1307 USA.  */
19
20 #include <pthread.h>
21 #include <stdio.h>
22
23
24 static int
25 do_test (void)
26 {
27   pthread_rwlock_t r;
28
29   if (pthread_rwlock_init (&r, NULL) != 0)
30     {
31       puts ("rwlock_init failed");
32       return 1;
33     }
34   puts ("rwlock_init succeeded");
35
36   if (pthread_rwlock_rdlock (&r) != 0)
37     {
38       puts ("1st rwlock_rdlock failed");
39       return 1;
40     }
41   puts ("1st rwlock_rdlock succeeded");
42
43   if (pthread_rwlock_rdlock (&r) != 0)
44     {
45       puts ("2nd rwlock_rdlock failed");
46       return 1;
47     }
48   puts ("2nd rwlock_rdlock succeeded");
49
50   if (pthread_rwlock_unlock (&r) != 0)
51     {
52       puts ("1st rwlock_unlock failed");
53       return 1;
54     }
55   puts ("1st rwlock_unlock succeeded");
56
57   if (pthread_rwlock_unlock (&r) != 0)
58     {
59       puts ("2nd rwlock_unlock failed");
60       return 1;
61     }
62   puts ("2nd rwlock_unlock succeeded");
63
64   if (pthread_rwlock_wrlock (&r) != 0)
65     {
66       puts ("1st rwlock_wrlock failed");
67       return 1;
68     }
69   puts ("1st rwlock_wrlock succeeded");
70
71   if (pthread_rwlock_unlock (&r) != 0)
72     {
73       puts ("3rd rwlock_unlock failed");
74       return 1;
75     }
76   puts ("3rd rwlock_unlock succeeded");
77
78   if (pthread_rwlock_wrlock (&r) != 0)
79     {
80       puts ("2nd rwlock_wrlock failed");
81       return 1;
82     }
83   puts ("2nd rwlock_wrlock succeeded");
84
85   if (pthread_rwlock_unlock (&r) != 0)
86     {
87       puts ("4th rwlock_unlock failed");
88       return 1;
89     }
90   puts ("4th rwlock_unlock succeeded");
91
92   if (pthread_rwlock_rdlock (&r) != 0)
93     {
94       puts ("3rd rwlock_rdlock failed");
95       return 1;
96     }
97   puts ("3rd rwlock_rdlock succeeded");
98
99   if (pthread_rwlock_unlock (&r) != 0)
100     {
101       puts ("5th rwlock_unlock failed");
102       return 1;
103     }
104   puts ("5th rwlock_unlock succeeded");
105
106   if (pthread_rwlock_destroy (&r) != 0)
107     {
108       puts ("rwlock_destroy failed");
109       return 1;
110     }
111   puts ("rwlock_destroy succeeded");
112
113   return 0;
114 }
115
116 #define TEST_FUNCTION do_test ()
117 #include "../test-skeleton.c"