Add comments
[src/app-framework-binder.git] / src / main.c
index d31f1f5..dee82a7 100644 (file)
@@ -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,13 +506,17 @@ int main(int argc, char *argv[])
        if (execute_command() < 0)
                exit(1);
 
-       // infinite loop
-       eventloop = afb_common_get_event_loop();
-       sd_notify(1, "READY=1");
-       for (;;)
-               sd_event_run(eventloop, 30000000);
+       /* 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;
+       }
 
-       WARNING("hoops returned from infinite loop [report bug]");
+       /* ready */
+       sd_notify(1, "READY=1");
 
+       /* turn as processing thread */
+       jobs_add_me();
+       WARNING("hoops returned from jobs_add_me! [report bug]");
        return 0;
 }