From 81e38d02e6d87d7f78e12d3d079c006b63dc63c2 Mon Sep 17 00:00:00 2001 From: Marc Di Luzio Date: Wed, 22 May 2019 17:10:20 +0100 Subject: [PATCH] Move daemonise code to main file, simplifying files --- daemon/daemonize.c | 81 ----------------------------------------- daemon/daemonize.h | 38 ------------------- daemon/dbus_messaging.c | 1 - daemon/main.c | 47 +++++++++++++++++++++++- daemon/meson.build | 1 - 5 files changed, 46 insertions(+), 122 deletions(-) delete mode 100644 daemon/daemonize.c delete mode 100644 daemon/daemonize.h diff --git a/daemon/daemonize.c b/daemon/daemonize.c deleted file mode 100644 index d6dfa41..0000000 --- a/daemon/daemonize.c +++ /dev/null @@ -1,81 +0,0 @@ -/* - -Copyright (c) 2017-2019, Feral Interactive -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - * Redistributions of source code must retain the above copyright notice, - this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - * Neither the name of Feral Interactive nor the names of its contributors - may be used to endorse or promote products derived from this software - without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE -ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE -LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR -CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF -SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS -INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN -CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) -ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE -POSSIBILITY OF SUCH DAMAGE. - - */ -#include "daemonize.h" -#include "logging.h" - -#include -#include -#include -#include -#include - -/** - * Helper to perform standard UNIX daemonization - */ -void daemonize(const char *name) -{ - /* Initial fork */ - pid_t pid = fork(); - if (pid < 0) { - FATAL_ERRORNO("Failed to fork"); - } - - if (pid != 0) { - LOG_MSG("Daemon launched as %s...\n", name); - exit(EXIT_SUCCESS); - } - - /* Fork a second time */ - pid = fork(); - if (pid < 0) { - FATAL_ERRORNO("Failed to fork"); - } else if (pid > 0) { - exit(EXIT_SUCCESS); - } - - /* Now continue execution */ - umask(0022); - if (setsid() < 0) { - FATAL_ERRORNO("Failed to create process group\n"); - } - if (chdir("/") < 0) { - FATAL_ERRORNO("Failed to change to root directory\n"); - } - - /* replace standard file descriptors by /dev/null */ - int devnull_r = open("/dev/null", O_RDONLY); - int devnull_w = open("/dev/null", O_WRONLY); - dup2(devnull_r, STDIN_FILENO); - dup2(devnull_w, STDOUT_FILENO); - dup2(devnull_w, STDERR_FILENO); - close(devnull_r); - close(devnull_w); -} diff --git a/daemon/daemonize.h b/daemon/daemonize.h deleted file mode 100644 index b5b4602..0000000 --- a/daemon/daemonize.h +++ /dev/null @@ -1,38 +0,0 @@ -/* - -Copyright (c) 2017-2019, Feral Interactive -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - * Redistributions of source code must retain the above copyright notice, - this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - * Neither the name of Feral Interactive nor the names of its contributors - may be used to endorse or promote products derived from this software - without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE -ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE -LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR -CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF -SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS -INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN -CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) -ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE -POSSIBILITY OF SUCH DAMAGE. - - */ - -#pragma once - -/** - * Attempt daemonization of the process. - * If this fails, the process will exit - */ -void daemonize(const char *name); diff --git a/daemon/dbus_messaging.c b/daemon/dbus_messaging.c index 20b734e..eee022f 100644 --- a/daemon/dbus_messaging.c +++ b/daemon/dbus_messaging.c @@ -32,7 +32,6 @@ POSSIBILITY OF SUCH DAMAGE. #define _GNU_SOURCE #include "dbus_messaging.h" -#include "daemonize.h" #include "gamemode.h" #include "logging.h" diff --git a/daemon/main.c b/daemon/main.c index 875f65d..f26785b 100644 --- a/daemon/main.c +++ b/daemon/main.c @@ -50,16 +50,18 @@ POSSIBILITY OF SUCH DAMAGE. #define _GNU_SOURCE #include "config.h" -#include "daemonize.h" #include "dbus_messaging.h" #include "gamemode.h" #include "gamemode_client.h" #include "logging.h" +#include #include #include #include #include +#include +#include #include #include @@ -95,6 +97,49 @@ static void sigint_handler_noexit(__attribute__((unused)) int signo) LOG_MSG("Quitting by request...\n"); } +/** + * Helper to perform standard UNIX daemonization + */ +static void daemonize(const char *name) +{ + /* Initial fork */ + pid_t pid = fork(); + if (pid < 0) { + FATAL_ERRORNO("Failed to fork"); + } + + if (pid != 0) { + LOG_MSG("Daemon launched as %s...\n", name); + exit(EXIT_SUCCESS); + } + + /* Fork a second time */ + pid = fork(); + if (pid < 0) { + FATAL_ERRORNO("Failed to fork"); + } else if (pid > 0) { + exit(EXIT_SUCCESS); + } + + /* Now continue execution */ + umask(0022); + if (setsid() < 0) { + FATAL_ERRORNO("Failed to create process group\n"); + } + if (chdir("/") < 0) { + FATAL_ERRORNO("Failed to change to root directory\n"); + } + + /* replace standard file descriptors by /dev/null */ + int devnull_r = open("/dev/null", O_RDONLY); + int devnull_w = open("/dev/null", O_WRONLY); + dup2(devnull_r, STDIN_FILENO); + dup2(devnull_w, STDOUT_FILENO); + dup2(devnull_w, STDERR_FILENO); + close(devnull_r); + close(devnull_w); +} + /** * Main bootstrap entry into gamemoded */ diff --git a/daemon/meson.build b/daemon/meson.build index d7cd0b5..aae53e6 100644 --- a/daemon/meson.build +++ b/daemon/meson.build @@ -27,7 +27,6 @@ daemon_sources = [ 'gamemode-wine.c', 'gamemode-tests.c', 'gamemode-gpu.c', - 'daemonize.c', 'dbus_messaging.c', 'daemon_config.c', 'helpers.c',