Add hooking of daemon interface
[src/app-framework-binder.git] / src / main.c
index 3809400..a1b09c1 100644 (file)
@@ -41,7 +41,6 @@
 #include "afb-hsrv.h"
 #include "afb-context.h"
 #include "afb-hreq.h"
-#include "sig-monitor.h"
 #include "jobs.h"
 #include "afb-session.h"
 #include "verbose.h"
@@ -100,11 +99,10 @@ static void start_list(struct afb_config_list *list,
  +--------------------------------------------------------- */
 static void exit_handler()
 {
-       /* TODO: check whether using SIGHUP isn't better */
        if (SELF_PGROUP)
-               killpg(0, SIGKILL);
+               killpg(0, SIGHUP);
        else if (childpid > 0)
-               killpg(childpid, SIGKILL);
+               killpg(childpid, SIGHUP);
 }
 
 /*----------------------------------------------------------
@@ -393,22 +391,11 @@ 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);
-}
-
 /*---------------------------------------------------------
  | job for starting the daemon
  +--------------------------------------------------------- */
 
-static void start(int signum)
+static void start()
 {
        struct afb_hsrv *hsrv;
 
@@ -424,7 +411,13 @@ static void start(int signum)
                goto error;
        }
 
-       afb_api_so_set_timeout(config->apiTimeout);
+       /* install hooks */
+       if (config->tracereq)
+               afb_hook_create_xreq(NULL, NULL, NULL, config->tracereq, NULL, NULL);
+       if (config->traceditf)
+               afb_hook_create_ditf(NULL, config->traceditf, NULL, NULL);
+
+       afb_apis_set_timeout(config->apiTimeout);
        start_list(config->dbus_clients, afb_api_dbus_add_client, "the afb-dbus client");
        start_list(config->ws_clients, afb_api_ws_add_client, "the afb-websocket client");
        start_list(config->ldpaths, afb_api_so_add_pathset, "the binding path set");
@@ -448,10 +441,6 @@ static void start(int signum)
 
        DEBUG("Init config done");
 
-       /* 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)
                goto error;
@@ -483,12 +472,11 @@ 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);
+       INFO("running with pid %d", getpid());
 
        // --------- run -----------
        if (config->background) {
@@ -506,33 +494,9 @@ int main(int argc, char *argv[])
        /* 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) {
-               ERROR("failed to set main_event_wait_and_dispatch");
-               return 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;
+       /* enter job processing */
+       jobs_start(3, 0, 50, start);
+       WARNING("hoops returned from jobs_enter! [report bug]");
+       return 1;
 }