Replace usleep() with nanosleep().
authorGuus Sliepen <guus@tinc-vpn.org>
Thu, 14 Apr 2016 15:20:36 +0000 (17:20 +0200)
committerGuus Sliepen <guus@tinc-vpn.org>
Thu, 14 Apr 2016 15:21:47 +0000 (17:21 +0200)
configure.ac
src/dropin.c
src/dropin.h
src/net.c

index d43bfa025781571c7e6a2beb4be6a4c08f7c4d79..9691fd5b108f1adcfd3bf52acd1e787ef2b946a9 100644 (file)
@@ -199,7 +199,7 @@ AC_CHECK_TYPES([socklen_t, struct ether_header, struct arphdr, struct ether_arp,
 
 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"]
 )
 
index 6d40850763d00b5867e7b853e3d35527a4b1447a..a229755771494976d4a95ab1fab54705be32ddb8 100644 (file)
@@ -1,7 +1,7 @@
 /*
     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
@@ -174,10 +174,9 @@ int gettimeofday(struct timeval *tv, void *tz) {
 }
 #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
index 5601a312fd26ec7288d3e71c4b9990b472da2c35..fff2d41385c32e6010a633fbd6a104783f545bc2 100644 (file)
@@ -41,8 +41,8 @@ extern int vasprintf(char **, const char *, va_list ap);
 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
index a539425668b865b61bba91c2112d2530945b1dc2..9094d61d5d2aebaadd6ff1784020ebedb013b70b 100644 (file)
--- a/src/net.c
+++ b/src/net.c
@@ -181,7 +181,7 @@ static void periodic_handler(void *data) {
 
        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;