From 7a109aa8eb202fe74008107f619599852e5d1d87 Mon Sep 17 00:00:00 2001 From: Alin Gabriel Serdean Date: Fri, 5 Oct 2018 17:54:52 +0300 Subject: [PATCH] windows: Add set_detach function to daemon-windows.c 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 Acked-by: Ben Pfaff Acked-by: Anand Kumar --- lib/daemon-windows.c | 10 +++++++++- lib/daemon.h | 3 +++ 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/lib/daemon-windows.c b/lib/daemon-windows.c index 70c5f5d563f..7e5f264f5b9 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 f33e9df8df7..09415749636 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);