From 391ada39d89f9f90d186aed8e1d825be9c17a328 Mon Sep 17 00:00:00 2001 From: José Bollo Date: Thu, 30 Mar 2017 11:19:42 +0200 Subject: Refactor initialisation of the daemon MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This commit prepares a future job centrered main where 'sig_monitor_init', 'jobs_init', 'jobs_add_events', 'jobs_queue0' and 'jobs_add_me' will be merged in one single call provided as a feature of module jobs. Change-Id: I8ccb1bf1761c4fa1031e903bead863ff68e7df83 Signed-off-by: José Bollo --- src/main.c | 116 +++++++++++++++++++++++++++++++++++-------------------------- 1 file changed, 66 insertions(+), 50 deletions(-) diff --git a/src/main.c b/src/main.c index dee82a76..3809400f 100644 --- a/src/main.c +++ b/src/main.c @@ -405,45 +405,23 @@ static void main_event_wait_and_dispatch(int signum, void *closure) } /*--------------------------------------------------------- - | main - | Parse option and launch action + | job for starting the daemon +--------------------------------------------------------- */ -int main(int argc, char *argv[]) +static void start(int signum) { struct afb_hsrv *hsrv; - // let's run this program with a low priority - nice(20); - - LOGAUTH("afb-daemon"); - - sd_fds_init(); - - // ------------- Build session handler & init config ------- - config = afb_config_parse_arguments(argc, argv); - atexit(exit_handler); - - if (sig_monitor_init() < 0) { - ERROR("failed to initialise signal handlers"); - return 1; - } - - if (jobs_init(3, 1, 20) < 0) { - ERROR("failed to initialise threading"); - return 1; - } - // ------------------ sanity check ---------------------------------------- if (config->httpdPort <= 0) { ERROR("no port is defined"); - exit(1); + goto error; } mkdir(config->workdir, S_IRWXU | S_IRGRP | S_IXGRP); if (chdir(config->workdir) < 0) { ERROR("Can't enter working dir %s", config->workdir); - exit(1); + goto error; } afb_api_so_set_timeout(config->apiTimeout); @@ -459,52 +437,86 @@ int main(int argc, char *argv[]) if (!afb_hreq_init_cookie(config->httpdPort, config->rootapi, config->cntxTimeout)) { ERROR("initialisation of cookies failed"); - exit(1); + goto error; } // set the root dir if (afb_common_rootdir_set(config->rootdir) < 0) { ERROR("failed to set common root directory"); - return 1; + goto error; } - // ------------------ Finaly Process Commands ----------------------------- - // let's not take the risk to run as ROOT - //if (getuid() == 0) goto errorNoRoot; - DEBUG("Init config done"); - // --------- run ----------- - if (config->background) { - // --------- in background mode ----------- - INFO("entering background mode"); - daemonize(); - } else { - // ---- in foreground mode -------------------- - INFO("entering foreground mode"); - } - - /* ignore any SIGPIPE */ - signal(SIGPIPE, SIG_IGN); - /* install trace of requests */ if (config->tracereq) afb_hook_req_create(NULL, NULL, NULL, config->tracereq, NULL, NULL); /* start the services */ if (afb_apis_start_all_services(1) < 0) - exit(1); + goto error; /* start the HTTP server */ if (!config->noHttpd) { hsrv = start_http_server(); if (hsrv == NULL) - exit(1); + goto error; } /* run the command */ if (execute_command() < 0) - exit(1); + goto error; + + /* ready */ + sd_notify(1, "READY=1"); + return; +error: + exit(1); +} +/*--------------------------------------------------------- + | main + | Parse option and launch action + +--------------------------------------------------------- */ + +int main(int argc, char *argv[]) +{ + // let's run this program with a low priority + nice(20); + + LOGAUTH("afb-daemon"); + + sd_fds_init(); + + // ------------- Build session handler & init config ------- + config = afb_config_parse_arguments(argc, argv); + + // --------- run ----------- + if (config->background) { + // --------- in background mode ----------- + INFO("entering background mode"); + daemonize(); + } else { + // ---- in foreground mode -------------------- + INFO("entering foreground mode"); + } + + /* handle groups */ + atexit(exit_handler); + + /* ignore any SIGPIPE */ + signal(SIGPIPE, SIG_IGN); + + /* start */ + if (sig_monitor_init() < 0) { + ERROR("failed to initialise signal handlers"); + return 1; + } + + /* init job processing */ + if (jobs_init(3, 1, 20) < 0) { + ERROR("failed to initialise threading"); + return 1; + } /* records the loop */ if (jobs_add_events(NULL, 0, main_event_wait_and_dispatch, afb_common_get_event_loop()) < 0) { @@ -512,11 +524,15 @@ int main(int argc, char *argv[]) return 1; } - /* ready */ - sd_notify(1, "READY=1"); + /* queue the start job */ + if (jobs_queue0(NULL, 0, start) < 0) { + ERROR("failed to set main_event_wait_and_dispatch"); + return 1; + } /* turn as processing thread */ jobs_add_me(); WARNING("hoops returned from jobs_add_me! [report bug]"); return 0; } + -- cgit 1.2.3-korg