main: improve start
[src/app-framework-binder.git] / src / main.c
index 0924e04..d099e1f 100644 (file)
  */
 
 #define _GNU_SOURCE
-#define NO_BINDING_VERBOSE_MACRO
+#define AFB_BINDING_PRAGMA_NO_VERBOSE_MACRO
 
 #include <stdlib.h>
+#include <stdio.h>
 #include <stdint.h>
 #include <signal.h>
 #include <string.h>
@@ -45,6 +46,7 @@
 #include "afb-session.h"
 #include "verbose.h"
 #include "afb-common.h"
+#include "afb-monitor.h"
 #include "afb-hook.h"
 #include "sd-fds.h"
 
@@ -111,7 +113,6 @@ static void exit_handler()
                killpg(0, SIGTERM);
        else if (childpid > 0)
                killpg(childpid, SIGTERM);
-       exit(0);
 }
 
 static void on_sigterm(int signum, siginfo_t *info, void *uctx)
@@ -446,11 +447,11 @@ struct startup_req
        struct afb_session *session;
 };
 
-static void startup_call_reply(struct afb_xreq *xreq, int iserror, struct json_object *obj)
+static void startup_call_reply(struct afb_xreq *xreq, int status, struct json_object *obj)
 {
        struct startup_req *sreq = CONTAINER_OF_XREQ(struct startup_req, xreq);
 
-       if (!iserror)
+       if (status >= 0)
                NOTICE("startup call %s returned %s", sreq->current->value, json_object_get_string(obj));
        else {
                ERROR("startup call %s ERROR! %s", sreq->current->value, json_object_get_string(obj));
@@ -528,10 +529,15 @@ static void run_startup_calls()
  | job for starting the daemon
  +--------------------------------------------------------- */
 
-static void start()
+static void start(int signum)
 {
        struct afb_hsrv *hsrv;
 
+       if (signum) {
+               ERROR("start aborted: received signal %s", strsignal(signum));
+               exit(1);
+       }
+
        // ------------------ sanity check ----------------------------------------
        if (config->httpdPort <= 0) {
                ERROR("no port is defined");
@@ -550,14 +556,18 @@ static void start()
        }
 
        /* configure the daemon */
-       main_apiset = afb_apiset_create("main", config->apiTimeout, NULL);
+       afb_session_init(config->nbSessionMax, config->cntxTimeout, config->token);
+       if (!afb_hreq_init_cookie(config->httpdPort, config->rootapi, config->cntxTimeout)) {
+               ERROR("initialisation of cookies failed");
+               goto error;
+       }
+       main_apiset = afb_apiset_create("main", config->apiTimeout);
        if (!main_apiset) {
                ERROR("can't create main api set");
                goto error;
        }
-       afb_session_init(config->nbSessionMax, config->cntxTimeout, config->token);
-       if (!afb_hreq_init_cookie(config->httpdPort, config->rootapi, config->cntxTimeout)) {
-               ERROR("initialisation of cookies failed");
+       if (afb_monitor_init() < 0) {
+               ERROR("failed to setup monitor");
                goto error;
        }
 
@@ -566,6 +576,10 @@ static void start()
                afb_hook_create_xreq(NULL, NULL, NULL, config->tracereq, NULL, NULL);
        if (config->traceditf)
                afb_hook_create_ditf(NULL, config->traceditf, NULL, NULL);
+       if (config->tracesvc)
+               afb_hook_create_svc(NULL, config->tracesvc, NULL, NULL);
+       if (config->traceevt)
+               afb_hook_create_evt(NULL, config->traceevt, NULL, NULL);
 
        /* load bindings */
        apiset_start_list(config->dbus_clients, afb_api_dbus_add_client, "the afb-dbus client");
@@ -589,15 +603,15 @@ static void start()
                        goto error;
        }
 
+       /* run the startup calls */
+       run_startup_calls();
+
        /* run the command */
        if (execute_command() < 0)
                goto error;
 
        /* ready */
        sd_notify(1, "READY=1");
-
-       /* run the startup calls */
-       run_startup_calls();
        return;
 error:
        exit(1);
@@ -617,7 +631,6 @@ int main(int argc, char *argv[])
 
        // ------------- Build session handler & init config -------
        config = afb_config_parse_arguments(argc, argv);
-       INFO("running with pid %d", getpid());
 
        // --------- run -----------
        if (config->background) {
@@ -628,6 +641,7 @@ int main(int argc, char *argv[])
                // ---- in foreground mode --------------------
                INFO("entering foreground mode");
        }
+       INFO("running with pid %d", getpid());
 
        /* set the daemon environment */
        setup_daemon();