From 33a9249571a396609d865467458329718699f9b4 Mon Sep 17 00:00:00 2001 From: Mans Rullgard Date: Fri, 20 Apr 2018 13:46:15 +0100 Subject: [PATCH] slcand: daemonise only once setup is complete Delay the daemon() call until the interface has been configured. This simplifies scripts that wish to use the new interface immediately. Signed-off-by: Mans Rullgard --- slcand.c | 27 +++++++++++++-------------- 1 file changed, 13 insertions(+), 14 deletions(-) diff --git a/slcand.c b/slcand.c index 304c880..5b3fc39 100644 --- a/slcand.c +++ b/slcand.c @@ -280,23 +280,9 @@ int main(int argc, char *argv[]) syslogger(LOG_INFO, "starting on TTY device %s", ttypath); - /* Daemonize */ - if (run_as_daemon) { - if (daemon(0, 0)) { - syslogger(LOG_ERR, "failed to daemonize"); - exit(EXIT_FAILURE); - } - } - else { - /* Trap signals that we expect to receive */ - signal(SIGINT, child_handler); - signal(SIGTERM, child_handler); - } - /* */ slcand_running = 1; - /* Now we are a daemon -- do the work for which we were paid */ fd = open(ttypath, O_RDWR | O_NONBLOCK | O_NOCTTY); if (fd < 0) { syslogger(LOG_NOTICE, "failed to open TTY device %s\n", ttypath); @@ -400,6 +386,19 @@ int main(int argc, char *argv[]) } } + /* Daemonize */ + if (run_as_daemon) { + if (daemon(0, 0)) { + syslogger(LOG_ERR, "failed to daemonize"); + exit(EXIT_FAILURE); + } + } + else { + /* Trap signals that we expect to receive */ + signal(SIGINT, child_handler); + signal(SIGTERM, child_handler); + } + /* The Big Loop */ while (slcand_running) sleep(1); /* wait 1 second */