datapath: Don't use vlan_features before 2.6.26.
[openvswitch] / lib / daemon.c
index c0f168291e6ed053540e9260ec8e6997d4b8d4a3..a8b3fae3c6e2e5ae5505ed38077dd5b013010ca8 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2008, 2009, 2010 Nicira Networks.
+ * Copyright (c) 2008, 2009, 2010, 2011 Nicira Networks.
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -475,11 +475,14 @@ daemonize_start(void)
 }
 
 /* If daemonization is configured, then this function notifies the parent
- * process that the child process has completed startup successfully. */
+ * process that the child process has completed startup successfully.
+ *
+ * Calling this function more than once has no additional effect. */
 void
 daemonize_complete(void)
 {
     fork_notify_startup(daemonize_fd);
+    daemonize_fd = -1;
 
     if (detach) {
         setsid();
@@ -487,6 +490,7 @@ daemonize_complete(void)
             ignore(chdir("/"));
         }
         close_standard_fds();
+        detach = false;
     }
 }
 
@@ -536,6 +540,7 @@ read_pidfile(const char *pidfile)
     lck.l_whence = SEEK_SET;
     lck.l_start = 0;
     lck.l_len = 0;
+    lck.l_pid = 0;
     if (fcntl(fileno(file), F_GETLK, &lck)) {
         error = errno;
         VLOG_WARN("%s: fcntl: %s", pidfile, strerror(error));