summaryrefslogtreecommitdiff
path: root/lib/daemon.c
diff options
context:
space:
mode:
authorBen Pfaff <blp@nicira.com>2009-10-15 10:39:10 -0700
committerBen Pfaff <blp@nicira.com>2009-10-15 10:43:36 -0700
commit03fbffbda4d36188944a4df39eace449a0c306dd (patch)
treea5a1de48e38556fca5be3c83744da237f1851d41 /lib/daemon.c
parent43a6c464efaf271411c8e2d19357e11bf6ff5afa (diff)
downloadopenvswitch-03fbffbda4d36188944a4df39eace449a0c306dd.tar.gz
Make sure that time advances in a daemon between calls to time_refresh().
Open vSwitch uses an interval timer signal to tell it that its cached idea of the current time has expired. However, this didn't work in a daemon detached from the foreground session (invoked with --detach) because a child created with fork() does not inherit the parent's interval timer and we did not re-set it after calling fork(). This commit fixes the problem by setting the interval timer back up after calling fork() from daemonize(). This fix is based on code inspection (which was then verified to be correct through testing). It may not fix any actual problems in practice, because time_refresh() is called every time through the poll loop, and the poll loop typically runs more quickly than the periodic timer fires (1 ms or so average in ovs-vswitchd, vs. 100 ms timer interval).
Diffstat (limited to 'lib/daemon.c')
-rw-r--r--lib/daemon.c2
1 files changed, 2 insertions, 0 deletions
diff --git a/lib/daemon.c b/lib/daemon.c
index 1e3f00295..a35c63934 100644
--- a/lib/daemon.c
+++ b/lib/daemon.c
@@ -23,6 +23,7 @@
#include <unistd.h>
#include "fatal-signal.h"
#include "dirs.h"
+#include "timeval.h"
#include "util.h"
#define THIS_MODULE VLM_daemon
@@ -222,6 +223,7 @@ daemonize(void)
if (chdir_) {
chdir("/");
}
+ time_postfork();
break;
case -1: