]> rtime.felk.cvut.cz Git - l4.git/blob - l4/pkg/uclibc/lib/contrib/uclibc/test/nptl/tst-eintr5.c
update
[l4.git] / l4 / pkg / uclibc / lib / contrib / uclibc / test / nptl / tst-eintr5.c
1 /* Copyright (C) 2003 Free Software Foundation, Inc.
2    This file is part of the GNU C Library.
3    Contributed by Ulrich Drepper <drepper@redhat.com>, 2003.
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 <errno.h>
20 #include <pthread.h>
21 #include <signal.h>
22 #include <stdio.h>
23 #include <stdlib.h>
24 #include <string.h>
25 #include <sys/time.h>
26
27 #include "eintr.c"
28
29
30 static pthread_mutex_t m = PTHREAD_MUTEX_INITIALIZER;
31 static pthread_cond_t c = PTHREAD_COND_INITIALIZER;
32
33
34 static void *
35 tf (void *arg)
36 {
37   struct timespec ts;
38   struct timeval tv;
39
40   gettimeofday (&tv, NULL);
41   TIMEVAL_TO_TIMESPEC (&tv, &ts);
42   ts.tv_sec += 10000;
43
44   /* This call must never return.  */
45   int e = pthread_cond_timedwait (&c, &m, &ts);
46   char buf[100];
47   printf ("tf: cond_timedwait returned: %s\n",
48           strerror_r (e, buf, sizeof (buf)));
49
50   exit (1);
51 }
52
53
54 static int
55 do_test (void)
56 {
57   setup_eintr (SIGUSR1, NULL);
58
59   pthread_t th;
60   char buf[100];
61   int e = pthread_create (&th, NULL, tf, NULL);
62   if (e != 0)
63     {
64       printf ("main: pthread_create failed: %s\n",
65               strerror_r (e, buf, sizeof (buf)));
66       exit (1);
67     }
68
69   /* This call must never return.  */
70   e = pthread_cond_wait (&c, &m);
71   printf ("main: cond_wait returned: %s\n",
72           strerror_r (e, buf, sizeof (buf)));
73
74   return 0;
75 }
76
77 #define EXPECTED_SIGNAL SIGALRM
78 #define TIMEOUT 3
79 #define TEST_FUNCTION do_test ()
80 #include "../test-skeleton.c"