dnl Checks for library functions.
AC_TYPE_SIGNAL
-AC_CHECK_FUNCS([asprintf daemon fchmod flock ftime fork get_current_dir_name gettimeofday mlockall putenv random recvmmsg select strdup strsignal usleep unsetenv vsyslog devname fdevname],
+AC_CHECK_FUNCS([asprintf daemon fchmod flock ftime fork get_current_dir_name gettimeofday mlockall putenv random recvmmsg select strdup strsignal nanosleep unsetenv vsyslog devname fdevname],
[], [], [#include "$srcdir/src/have.h"]
)
/*
dropin.c -- a set of drop-in replacements for libc functions
Copyright (C) 2000-2005 Ivo Timmermans,
- 2000-2013 Guus Sliepen <guus@tinc-vpn.org>
+ 2000-2016 Guus Sliepen <guus@tinc-vpn.org>
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
}
#endif
-#ifndef HAVE_USLEEP
-int usleep(long long usec) {
- struct timeval tv = {usec / 1000000, (usec / 1000) % 1000};
- select(0, NULL, NULL, NULL, &tv);
- return 0;
+#ifndef HAVE_NANOSLEEP
+int nanosleep(const struct timespec *req, struct timespec *rem) {
+ struct timeval tv = {req->tv_sec, req->tv_nsec / 1000};
+ return select(0, NULL, NULL, NULL, &tv);
}
#endif
extern int gettimeofday(struct timeval *, void *);
#endif
-#ifndef HAVE_USLEEP
-extern int usleep(long long usec);
+#ifndef HAVE_NANOSLEEP
+extern int nanosleep(const struct timespec *req, struct timespec *rem);
#endif
#ifndef timeradd
if(contradicting_del_edge > 100 && contradicting_add_edge > 100) {
logger(DEBUG_ALWAYS, LOG_WARNING, "Possible node with same Name as us! Sleeping %d seconds.", sleeptime);
- usleep(sleeptime * 1000000LL);
+ nanosleep(&(struct timespec){sleeptime, 0}, NULL);
sleeptime *= 2;
if(sleeptime < 0)
sleeptime = 3600;