OSDN Git Service

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