diff --git a/src/utils/os_internal.c b/src/utils/os_internal.c index 474c8a372..feade6ee6 100644 --- a/src/utils/os_internal.c +++ b/src/utils/os_internal.c @@ -25,10 +25,16 @@ void os_sleep(os_time_t sec, os_time_t usec) { +#if defined(_POSIX_C_SOURCE) && (_POSIX_C_SOURCE >= 200809L) + const struct timespec req = { sec, usec * 1000 }; + + nanosleep(&req, NULL); +#else if (sec) sleep(sec); if (usec) usleep(usec); +#endif } diff --git a/src/utils/os_unix.c b/src/utils/os_unix.c index 800c50772..dd504f3ab 100644 --- a/src/utils/os_unix.c +++ b/src/utils/os_unix.c @@ -49,10 +49,16 @@ struct os_alloc_trace { void os_sleep(os_time_t sec, os_time_t usec) { +#if defined(_POSIX_C_SOURCE) && (_POSIX_C_SOURCE >= 200809L) + const struct timespec req = { sec, usec * 1000 }; + + nanosleep(&req, NULL); +#else if (sec) sleep(sec); if (usec) usleep(usec); +#endif }