1 /* Copyright (C) 2002-2021 Free Software Foundation, Inc.
2 This file is part of the GNU C Library.
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.
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.
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/>. */
19 #include <semaphore.h>
23 #include <support/check.h>
24 #include <support/timespec.h>
25 #include <support/xtime.h>
27 /* A bogus clock value that tells run_test to use sem_timedwait rather than
29 #define CLOCK_USE_TIMEDWAIT (-1)
32 do_test_clock (clockid_t clockid
)
34 const clockid_t clockid_for_get
=
35 clockid
== CLOCK_USE_TIMEDWAIT
? CLOCK_REALTIME
: clockid
;
39 TEST_COMPARE (sem_init (&s
, 0, 1), 0);
40 TEST_COMPARE (TEMP_FAILURE_RETRY (sem_wait (&s
)), 0);
42 /* We wait for half a second. */
43 xclock_gettime (clockid_for_get
, &ts
);
44 ts
= timespec_add (ts
, make_timespec (0, TIMESPEC_HZ
/2));
47 TEST_COMPARE (TEMP_FAILURE_RETRY ((clockid
== CLOCK_USE_TIMEDWAIT
)
48 ? sem_timedwait (&s
, &ts
)
49 : sem_clockwait (&s
, clockid
, &ts
)), -1);
50 TEST_COMPARE (errno
, ETIMEDOUT
);
51 TEST_TIMESPEC_NOW_OR_AFTER (clockid_for_get
, ts
);
54 static int do_test (void)
56 do_test_clock (CLOCK_USE_TIMEDWAIT
);
57 do_test_clock (CLOCK_REALTIME
);
58 do_test_clock (CLOCK_MONOTONIC
);
62 #include <support/test-driver.c>