summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRobert Swiecki <robert@swiecki.net>2019-04-01 15:35:28 +0200
committerRobert Swiecki <robert@swiecki.net>2019-04-01 15:35:28 +0200
commite3d734f3442031fd8fe187226ffc4cb06873a1e2 (patch)
tree7ee600dc3f53d207fb30323e28c2da7c413966d3
parent89a4c2f344c8857a1b90eb591721b45d76923c1e (diff)
downloadhonggfuzz-e3d734f3442031fd8fe187226ffc4cb06873a1e2.tar.gz
hfcommin/util: implement sleep resistant to interrupts
-rw-r--r--fuzz.c2
-rw-r--r--honggfuzz.c2
-rw-r--r--libhfcommon/util.c13
-rw-r--r--libhfcommon/util.h1
-rw-r--r--libhfnetdriver/netdriver.c6
5 files changed, 17 insertions, 7 deletions
diff --git a/fuzz.c b/fuzz.c
index 0b07649a..7236f536 100644
--- a/fuzz.c
+++ b/fuzz.c
@@ -163,7 +163,7 @@ static void fuzz_setDynamicMainState(run_t* run) {
if (fuzz_isTerminating()) {
return;
}
- usleep(1000 * 10); /* Check every 10ms */
+ util_sleepForMSec(10); /* Check every 10ms */
}
LOG_I("Entering phase 3/3: Dynamic Main");
diff --git a/honggfuzz.c b/honggfuzz.c
index ef2d477c..4a3eb741 100644
--- a/honggfuzz.c
+++ b/honggfuzz.c
@@ -325,7 +325,7 @@ int main(int argc, char** argv) {
break;
}
pingThreads(&hfuzz);
- usleep(50000); /* 50ms */
+ util_sleepForMSec(50); /* 50ms */
}
/* Clean-up global buffers */
diff --git a/libhfcommon/util.c b/libhfcommon/util.c
index ac54167e..c8616676 100644
--- a/libhfcommon/util.c
+++ b/libhfcommon/util.c
@@ -24,6 +24,8 @@
#include "libhfcommon/util.h"
#include <ctype.h>
+#include <errno.h>
+#include <error.h>
#include <fcntl.h>
#include <inttypes.h>
#include <math.h>
@@ -242,6 +244,17 @@ int64_t util_timeNowMillis(void) {
return (((int64_t)tv.tv_sec * 1000LL) + ((int64_t)tv.tv_usec / 1000LL));
}
+void util_sleepForMSec(uint64_t msec) {
+ if (msec == 0) {
+ return;
+ }
+ struct timespec ts = {
+ .tv_sec = msec / 1000U,
+ .tv_nsec = msec % 1000U,
+ };
+ TEMP_FAILURE_RETRY(nanosleep(&ts, &ts));
+}
+
uint64_t util_getUINT32(const uint8_t* buf) {
uint32_t r;
memcpy(&r, buf, sizeof(r));
diff --git a/libhfcommon/util.h b/libhfcommon/util.h
index c92d4707..d71b3a70 100644
--- a/libhfcommon/util.h
+++ b/libhfcommon/util.h
@@ -109,6 +109,7 @@ extern void util_closeStdio(bool close_stdin, bool close_stdout, bool close_stde
extern uint64_t util_hash(const char* buf, size_t len);
extern int64_t util_timeNowMillis(void);
+extern void util_sleepForMSec(uint64_t msec);
extern uint64_t util_getUINT32(const uint8_t* buf);
extern uint64_t util_getUINT64(const uint8_t* buf);
diff --git a/libhfnetdriver/netdriver.c b/libhfnetdriver/netdriver.c
index 61d678b3..d71f195b 100644
--- a/libhfnetdriver/netdriver.c
+++ b/libhfnetdriver/netdriver.c
@@ -257,11 +257,7 @@ static void netDriver_waitForServerReady(uint16_t portno) {
". Sleeping for 0.5 seconds ...",
(int)getpid(), portno, portno);
- struct timespec ts = {
- .tv_sec = 0,
- .tv_nsec = 500000000ULL,
- };
- TEMP_FAILURE_RETRY(nanosleep(&ts, &ts));
+ util_sleepForMSec(500);
}
}