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 <stdlib.h>
21 
22 
23 static pthread_mutex_t lock = PTHREAD_MUTEX_INITIALIZER;
24 
25 
26 static void *
tf(void * arg)27 tf (void *arg)
28 {
29   pthread_t mh = (pthread_t) arg;
30   void *result;
31 
32   if (pthread_mutex_unlock (&lock) != 0)
33     {
34       puts ("unlock failed");
35       exit (1);
36     }
37 
38   if (pthread_join (mh, &result) != 0)
39     {
40       puts ("join failed");
41       exit (1);
42     }
43 
44   if (result != (void *) 42l)
45     {
46       printf ("result wrong: expected %p, got %p\n", (void *) 42, result);
47       exit (1);
48     }
49 
50   exit (0);
51 }
52 
53 
54 static int
do_test(void)55 do_test (void)
56 {
57   pthread_t th;
58 
59   if (pthread_mutex_lock (&lock) != 0)
60     {
61       puts ("1st lock failed");
62       exit (1);
63     }
64 
65   if (pthread_create (&th, NULL, tf, (void *) pthread_self ()) != 0)
66     {
67       puts ("create failed");
68       exit (1);
69     }
70 
71   if (pthread_mutex_lock (&lock) != 0)
72     {
73       puts ("2nd lock failed");
74       exit (1);
75     }
76 
77   pthread_exit ((void *) 42);
78 }
79 
80 #define TEST_FUNCTION do_test ()
81 #include "../test-skeleton.c"
82