96 lines
2.4 KiB
Diff
96 lines
2.4 KiB
Diff
diff -urN busybox-1.7.0/networking/isrv.c busybox-1.7.0-gettimeofday_ns/networking/isrv.c
|
|
--- busybox-1.7.0/networking/isrv.c 2007-08-24 11:49:41.000000000 +0100
|
|
+++ busybox-1.7.0-gettimeofday_ns/networking/isrv.c 2007-09-06 17:39:55.000000000 +0100
|
|
@@ -21,20 +21,6 @@
|
|
|
|
/* Helpers */
|
|
|
|
-/* Even if _POSIX_MONOTONIC_CLOCK is defined, this
|
|
- * may require librt */
|
|
-#if 0 /*def _POSIX_MONOTONIC_CLOCK*/
|
|
-static time_t monotonic_time(void)
|
|
-{
|
|
- struct timespec ts;
|
|
- if (clock_gettime(CLOCK_MONOTONIC, &ts) != 0)
|
|
- time(&ts.tv_sec);
|
|
- return ts.tv_sec;
|
|
-}
|
|
-#else
|
|
-#define monotonic_time() (time(NULL))
|
|
-#endif
|
|
-
|
|
/* Opaque structure */
|
|
|
|
struct isrv_state_t {
|
|
@@ -258,7 +244,7 @@
|
|
/* this peer is gone */
|
|
remove_peer(state, peer);
|
|
} else if (TIMEOUT) {
|
|
- TIMEO_TBL[peer] = monotonic_time();
|
|
+ TIMEO_TBL[peer] = monotonic_sec();
|
|
}
|
|
}
|
|
}
|
|
@@ -335,7 +321,7 @@
|
|
break;
|
|
|
|
if (timeout) {
|
|
- time_t t = monotonic_time();
|
|
+ time_t t = monotonic_sec();
|
|
if (t != CURTIME) {
|
|
CURTIME = t;
|
|
handle_timeout(state, do_timeout);
|
|
diff -urN busybox-1.7.0/runit/runsv.c busybox-1.7.0-gettimeofday_ns/runit/runsv.c
|
|
--- busybox-1.7.0/runit/runsv.c 2007-08-24 11:50:01.000000000 +0100
|
|
+++ busybox-1.7.0-gettimeofday_ns/runit/runsv.c 2007-09-06 17:39:55.000000000 +0100
|
|
@@ -33,6 +33,34 @@
|
|
#include "libbb.h"
|
|
#include "runit_lib.h"
|
|
|
|
+#if ENABLE_MONOTONIC_SYSCALL
|
|
+#include <sys/syscall.h>
|
|
+
|
|
+/* libc has incredibly messy way of doing this,
|
|
+ * typically requiring -lrt. We just skip all this mess */
|
|
+static void gettimeofday_ns(struct timespec *ts)
|
|
+{
|
|
+ syscall(__NR_clock_gettime, CLOCK_REALTIME, ts);
|
|
+}
|
|
+#else
|
|
+static void gettimeofday_ns(struct timespec *ts)
|
|
+{
|
|
+ if (sizeof(struct timeval) == sizeof(struct timespec)
|
|
+ && sizeof(((struct timeval*)ts)->tv_usec) == sizeof(ts->tv_nsec)
|
|
+ ) {
|
|
+ /* Cheat */
|
|
+ gettimeofday((void*)ts, NULL);
|
|
+ ts->tv_nsec *= 1000;
|
|
+ } else {
|
|
+ extern void BUG_need_to_implement_gettimeofday_ns(void);
|
|
+ BUG_need_to_implement_gettimeofday_ns();
|
|
+ }
|
|
+}
|
|
+#endif
|
|
+
|
|
+/* Compare possibly overflowing unsigned counters */
|
|
+#define LESS(a,b) ((int)((unsigned)(b) - (unsigned)(a)) > 0)
|
|
+
|
|
static int selfpipe[2];
|
|
|
|
/* state */
|
|
@@ -126,14 +154,6 @@
|
|
return 0;
|
|
}
|
|
|
|
-#define LESS(a,b) ((int)((unsigned)(b) - (unsigned)(a)) > 0)
|
|
-
|
|
-#include <sys/syscall.h>
|
|
-static void gettimeofday_ns(struct timespec *ts)
|
|
-{
|
|
- syscall(__NR_clock_gettime, CLOCK_REALTIME, ts);
|
|
-}
|
|
-
|
|
static void update_status(struct svdir *s)
|
|
{
|
|
ssize_t sz;
|