1/* C11 threads thread sleep implementation - Linux variant.
2 Copyright (C) 2020-2024 Free Software Foundation, Inc.
3 This file is part of the GNU C Library.
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 <https://www.gnu.org/licenses/>. */
18
19#include <time.h>
20#include <sysdep-cancel.h>
21
22#include "thrd_priv.h"
23
24int
25__thrd_sleep64 (const struct __timespec64 *time_point,
26 struct __timespec64 *remaining)
27{
28 int ret = __clock_nanosleep_time64 (CLOCK_REALTIME, 0, time_point,
29 remaining);
30 /* C11 states thrd_sleep function returns -1 if it has been interrupted
31 by a signal, or a negative value if it fails. */
32 switch (ret)
33 {
34 case 0: return 0;
35 case EINTR: return -1;
36 default: return -2;
37 }
38}
39
40#if __TIMESIZE != 64
41libc_hidden_def (__thrd_sleep64)
42
43int
44__thrd_sleep (const struct timespec *time_point, struct timespec *remaining)
45{
46 const struct __timespec64 treq64 = valid_timespec_to_timespec64 (*time_point);
47 struct __timespec64 trem64;
48
49 int ret = __thrd_sleep64 (&treq64, remaining != NULL ? &trem64 : NULL);
50 if (ret == -1 && remaining != NULL)
51 *remaining = valid_timespec64_to_timespec (trem64);
52
53 return ret;
54}
55#endif
56weak_alias (__thrd_sleep, thrd_sleep)
57

source code of glibc/sysdeps/unix/sysv/linux/thrd_sleep.c