X-Git-Url: https://gerrit.automotivelinux.org/gerrit/gitweb?a=blobdiff_plain;f=src%2Fmain.c;h=dee82a76af7bf7ffbb52d23e40963c1ca83fbbb3;hb=e94995611bd4e05a2aac1c0ae7c7f0855137b78a;hp=39296742c50af6796e49d0dad1c36feed3dcf445;hpb=3bf52bb36ed428d0a7b947519fbccc7c376fd4a9;p=src%2Fapp-framework-binder.git diff --git a/src/main.c b/src/main.c index 39296742..dee82a76 100644 --- a/src/main.c +++ b/src/main.c @@ -393,6 +393,17 @@ static int execute_command() return -1; } +/*--------------------------------------------------------- + | main event processing + +--------------------------------------------------------- */ + +static void main_event_wait_and_dispatch(int signum, void *closure) +{ + struct sd_event *event = closure; + if (signum == 0) + sd_event_run(event, 30000000); +} + /*--------------------------------------------------------- | main | Parse option and launch action @@ -401,7 +412,9 @@ static int execute_command() int main(int argc, char *argv[]) { struct afb_hsrv *hsrv; - struct sd_event *eventloop; + + // let's run this program with a low priority + nice(20); LOGAUTH("afb-daemon"); @@ -411,6 +424,16 @@ int main(int argc, char *argv[]) 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"); @@ -439,24 +462,12 @@ int main(int argc, char *argv[]) exit(1); } - if (sig_monitor_init() < 0) { - ERROR("failed to initialise signal handlers"); - return 1; - } - // set the root dir if (afb_common_rootdir_set(config->rootdir) < 0) { ERROR("failed to set common root directory"); return 1; } - if (jobs_init(3, 1, 20) < 0) { - ERROR("failed to initialise threading"); - return 1; - } - // let's run this program with a low priority - nice(20); - // ------------------ Finaly Process Commands ----------------------------- // let's not take the risk to run as ROOT //if (getuid() == 0) goto errorNoRoot; @@ -495,20 +506,17 @@ int main(int argc, char *argv[]) if (execute_command() < 0) exit(1); - /* signal that ready */ - if (config->readyfd != 0) { - static const char readystr[] = "READY=1"; - write(config->readyfd, readystr, sizeof(readystr) - 1); - close(config->readyfd); + /* records the loop */ + if (jobs_add_events(NULL, 0, main_event_wait_and_dispatch, afb_common_get_event_loop()) < 0) { + ERROR("failed to set main_event_wait_and_dispatch"); + return 1; } - // infinite loop - eventloop = afb_common_get_event_loop(); + /* ready */ sd_notify(1, "READY=1"); - for (;;) - sd_event_run(eventloop, 30000000); - - WARNING("hoops returned from infinite loop [report bug]"); + /* turn as processing thread */ + jobs_add_me(); + WARNING("hoops returned from jobs_add_me! [report bug]"); return 0; }