[tor-commits] [tor/master] New testing-only tor_sleep_msec function

nickm at torproject.org nickm at torproject.org
Sat Jun 14 15:47:50 UTC 2014


commit e2e588175eac4ebe8fb47c0540954d0f78525cce
Author: Nick Mathewson <nickm at torproject.org>
Date:   Wed Apr 30 12:48:46 2014 -0400

    New testing-only tor_sleep_msec function
    
    In the unit tests I want to loop with a delay, but I want less than
    a 1 second delay.  This, sadly, requires compatibility code.
---
 configure.ac        |    2 ++
 src/common/compat.c |   26 ++++++++++++++++++++++++++
 src/common/compat.h |    4 ++++
 3 files changed, 32 insertions(+)

diff --git a/configure.ac b/configure.ac
index c0c8187..c662a9f 100644
--- a/configure.ac
+++ b/configure.ac
@@ -355,6 +355,7 @@ AC_CHECK_FUNCS(
         sysconf \
 	sysctl \
         uname \
+        usleep \
         vasprintf \
 	_vscprintf
 )
@@ -885,6 +886,7 @@ AC_CHECK_HEADERS(
         sys/param.h \
         sys/prctl.h \
         sys/resource.h \
+        sys/select.h \
         sys/socket.h \
 	sys/sysctl.h \
         sys/syslimits.h \
diff --git a/src/common/compat.c b/src/common/compat.c
index 1ba264a..1c460b6 100644
--- a/src/common/compat.c
+++ b/src/common/compat.c
@@ -114,6 +114,12 @@
 /* Only use the linux prctl;  the IRIX prctl is totally different */
 #include <sys/prctl.h>
 #endif
+#ifdef TOR_UNIT_TESTS
+#if !defined(HAVE_USLEEP) && defined(HAVE_SYS_SELECT_H)
+/* as fallback implementation for tor_sleep_msec */
+#include <sys/select.h>
+#endif
+#endif
 
 #include "torlog.h"
 #include "util.h"
@@ -3450,3 +3456,23 @@ get_total_system_memory(size_t *mem_out)
   return -1;
 }
 
+#ifdef TOR_UNIT_TESTS
+/** Delay for <b>msec</b> milliseconds.  Only used in tests. */
+void
+tor_sleep_msec(int msec)
+{
+#ifdef _WIN32
+  Sleep(msec);
+#elif defined(HAVE_USLEEP)
+  sleep(msec / 1000);
+  /* Some usleep()s hate sleeping more than 1 sec */
+  usleep((msec % 1000) * 1000);
+#elif defined(HAVE_SYS_SELECT_H)
+  struct timeval tv = { msec / 1000, (msec % 1000) * 1000};
+  select(0, NULL, NULL, NULL, &tv);
+#else
+  sleep(CEIL_DIV(msec, 1000));
+#endif
+}
+#endif
+
diff --git a/src/common/compat.h b/src/common/compat.h
index 314b1aa..d723448 100644
--- a/src/common/compat.h
+++ b/src/common/compat.h
@@ -744,6 +744,10 @@ char *format_win32_error(DWORD err);
 
 #endif
 
+#ifdef TOR_UNIT_TESTS
+void tor_sleep_msec(int msec);
+#endif
+
 #ifdef COMPAT_PRIVATE
 #if !defined(HAVE_SOCKETPAIR) || defined(_WIN32) || defined(TOR_UNIT_TESTS)
 #define NEED_ERSATZ_SOCKETPAIR





More information about the tor-commits mailing list