OSDN Git Service

Merge commit 'origin/master' into nptl
[uclinux-h8/uClibc.git] / test / nptl / tst-tsd5.c
1 /* Copyright (C) 2004 Free Software Foundation, Inc.
2    This file is part of the GNU C Library.
3    Contributed by Ulrich Drepper <drepper@redhat.com>, 2004.
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 #include <stdlib.h>
23
24
25 static pthread_mutex_t m = PTHREAD_MUTEX_INITIALIZER;
26
27
28 static void
29 cl (void *p)
30 {
31   pthread_mutex_unlock (&m);
32 }
33
34
35 static void *
36 tf (void *arg)
37 {
38   if (pthread_mutex_lock (&m) != 0)
39     {
40       puts ("2nd mutex_lock failed");
41       exit (1);
42     }
43
44   exit (0);
45 }
46
47
48 static int
49 do_test (void)
50 {
51   pthread_key_t k;
52   if (pthread_key_create (&k, cl) != 0)
53     {
54       puts ("key_create failed");
55       return 1;
56     }
57   if (pthread_setspecific (k, (void *) 1) != 0)
58     {
59       puts ("setspecific failed");
60       return 1;
61     }
62
63   if (pthread_mutex_lock (&m) != 0)
64     {
65       puts ("1st mutex_lock failed");
66       return 1;
67     }
68
69   pthread_t th;
70   if (pthread_create (&th, NULL, tf, NULL) != 0)
71     {
72       puts ("create failed");
73       return 1;
74     }
75
76   pthread_exit (NULL);
77 }
78
79
80 #define TEST_FUNCTION do_test ()
81 #include "../test-skeleton.c"