[ovs-dev,v3,2/2] windows: Add set_detach function to daemon-windows.c

Message ID 20181005145452.24484-1-aserdean@ovn.org
State Accepted
Headers show
Series
  • [ovs-dev,v3,1/2] windows, ovn-nbctl: Add service_start call inside the server loop
Related show

Commit Message

Alin Gabriel Serdean Oct. 5, 2018, 2:54 p.m.
The daemon-windows file is missing a `set_detach` routine, so add it.

This will be useful in the long run.

Signed-off-by: Alin Gabriel Serdean <aserdean@ovn.org>
Acked-by: Ben Pfaff <blp@ovn.org>
---
v3: no change.
v2: Fix typo in title, add Ack
---
 lib/daemon-windows.c | 10 +++++++++-
 lib/daemon.h         |  3 +++
 2 files changed, 12 insertions(+), 1 deletion(-)

Patch

diff --git a/lib/daemon-windows.c b/lib/daemon-windows.c
index 70c5f5d56..7e5f264f5 100644
--- a/lib/daemon-windows.c
+++ b/lib/daemon-windows.c
@@ -82,6 +82,14 @@  daemon_usage(void)
                                    "unexpected failure. \n");
 }
 
+/* Sets up a following call to service_start() to detach from the foreground
+ * session, running this process in the background.  */
+void
+set_detach(void)
+{
+    detach = true;
+}
+
 /* Registers the call-back and configures the actions in case of a failure
  * with the Windows services manager. */
 void
@@ -357,7 +365,7 @@  detach_process(int argc, char *argv[])
 
     /* We are only interested in the '--detach' and '--pipe-handle'. */
     for (i = 0; i < argc; i ++) {
-        if (!strcmp(argv[i], "--detach")) {
+        if (!detach && !strcmp(argv[i], "--detach")) {
             detach = true;
         } else if (!strncmp(argv[i], "--pipe-handle", 13)) {
             /* If running as a child, return. */
diff --git a/lib/daemon.h b/lib/daemon.h
index f33e9df8d..094157496 100644
--- a/lib/daemon.h
+++ b/lib/daemon.h
@@ -121,6 +121,7 @@  pid_t read_pidfile(const char *name);
 
 #define DAEMON_OPTION_HANDLERS                  \
         case OPT_DETACH:                        \
+            set_detach();                       \
             break;                              \
                                                 \
         case OPT_NO_SELF_CONFINEMENT:           \
@@ -139,6 +140,7 @@  pid_t read_pidfile(const char *name);
             break;                              \
                                                 \
         case OPT_SERVICE:                       \
+            set_detach();                       \
             break;                              \
                                                 \
         case OPT_SERVICE_MONITOR:               \
@@ -159,6 +161,7 @@  pid_t read_pidfile(const char *name);
 
 void control_handler(DWORD request);
 void set_pipe_handle(const char *pipe_handle);
+void set_detach(void);
 #endif /* _WIN32 */
 
 bool get_detach(void);