]> git.ipfire.org Git - thirdparty/glibc.git/blame - nptl/tst-abstime.c
nptl: Move pthread_attr_setinheritsched implementation into libc.
[thirdparty/glibc.git] / nptl / tst-abstime.c
CommitLineData
04277e02 1/* Copyright (C) 2010-2019 Free Software Foundation, Inc.
48b42dde
AS
2 This file is part of the GNU C Library.
3 Contributed by Andreas Schwab <schwab@redhat.com>, 2010.
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
59ba27a6 16 License along with the GNU C Library; if not, see
5a82c748 17 <https://www.gnu.org/licenses/>. */
48b42dde 18
48b42dde
AS
19#include <errno.h>
20#include <pthread.h>
145569dc
UD
21#include <semaphore.h>
22#include <stdio.h>
44ac6ee9
MC
23#include <support/check.h>
24#include <support/xthread.h>
48b42dde 25
145569dc
UD
26static pthread_cond_t c = PTHREAD_COND_INITIALIZER;
27static pthread_mutex_t m1 = PTHREAD_MUTEX_INITIALIZER;
28static pthread_mutex_t m2 = PTHREAD_MUTEX_INITIALIZER;
29static pthread_rwlock_t rw1 = PTHREAD_RWLOCK_INITIALIZER;
30static pthread_rwlock_t rw2 = PTHREAD_RWLOCK_INITIALIZER;
31static sem_t sem;
48b42dde
AS
32
33static void *
34th (void *arg)
35{
48b42dde
AS
36 struct timespec t = { -2, 0 };
37
44ac6ee9 38 TEST_COMPARE (pthread_mutex_timedlock (&m1, &t), ETIMEDOUT);
9d20e22e
MC
39 TEST_COMPARE (pthread_mutex_clocklock (&m1, CLOCK_REALTIME, &t), ETIMEDOUT);
40 TEST_COMPARE (pthread_mutex_clocklock (&m1, CLOCK_MONOTONIC, &t), ETIMEDOUT);
44ac6ee9
MC
41 TEST_COMPARE (pthread_rwlock_timedrdlock (&rw1, &t), ETIMEDOUT);
42 TEST_COMPARE (pthread_rwlock_timedwrlock (&rw2, &t), ETIMEDOUT);
e996fa72
MC
43 TEST_COMPARE (pthread_rwlock_clockrdlock (&rw1, CLOCK_REALTIME, &t),
44 ETIMEDOUT);
45 TEST_COMPARE (pthread_rwlock_clockwrlock (&rw2, CLOCK_REALTIME, &t),
46 ETIMEDOUT);
47 TEST_COMPARE (pthread_rwlock_clockrdlock (&rw1, CLOCK_MONOTONIC, &t),
48 ETIMEDOUT);
49 TEST_COMPARE (pthread_rwlock_clockwrlock (&rw2, CLOCK_MONOTONIC, &t),
50 ETIMEDOUT);
44ac6ee9 51 return NULL;
48b42dde
AS
52}
53
145569dc 54static int
48b42dde
AS
55do_test (void)
56{
48b42dde 57 struct timespec t = { -2, 0 };
48b42dde 58
145569dc 59 sem_init (&sem, 0, 0);
44ac6ee9
MC
60 TEST_COMPARE (sem_timedwait (&sem, &t), -1);
61 TEST_COMPARE (errno, ETIMEDOUT);
62
63 xpthread_mutex_lock (&m1);
64 xpthread_rwlock_wrlock (&rw1);
65 xpthread_rwlock_rdlock (&rw2);
66 xpthread_mutex_lock (&m2);
67 pthread_t pth = xpthread_create (0, th, 0);
68 TEST_COMPARE (pthread_cond_timedwait (&c, &m2, &t), ETIMEDOUT);
69 xpthread_join (pth);
70 return 0;
48b42dde
AS
71}
72
44ac6ee9 73#include <support/test-driver.c>