jobs: Refactor exiting jobs
[src/app-framework-binder.git] / src / main-afb-daemon.c
index 75706b7..c2a5351 100644 (file)
@@ -38,7 +38,7 @@
 
 #include <systemd/sd-daemon.h>
 
-#include "afb-config.h"
+#include "afb-args.h"
 #include "afb-hswitch.h"
 #include "afb-apiset.h"
 #include "afb-autoset.h"
@@ -399,6 +399,17 @@ static struct afb_hsrv *start_http_server()
  | execute_command
  +--------------------------------------------------------- */
 
+static void wait_child_and_exit()
+{
+       pid_t pidchld = childpid;
+
+       childpid = 0;
+       if (!SELF_PGROUP)
+               killpg(pidchld, SIGKILL);
+       waitpid(pidchld, NULL, 0);
+       exit(0);
+}
+
 static void on_sigchld(int signum, siginfo_t *info, void *uctx)
 {
        if (info->si_pid == childpid) {
@@ -406,11 +417,9 @@ static void on_sigchld(int signum, siginfo_t *info, void *uctx)
                case CLD_EXITED:
                case CLD_KILLED:
                case CLD_DUMPED:
-                       childpid = 0;
-                       if (!SELF_PGROUP)
-                               killpg(info->si_pid, SIGKILL);
-                       waitpid(info->si_pid, NULL, 0);
-                       exit(0);
+                       jobs_exit(wait_child_and_exit);
+               default:
+                       break;
                }
        }
 }
@@ -898,7 +907,7 @@ int main(int argc, char *argv[])
        afb_debug("main-entry");
 
        // ------------- Build session handler & init config -------
-       main_config = afb_config_parse_arguments(argc, argv);
+       main_config = afb_args_parse(argc, argv);
        if (sig_monitor_init(
                !json_object_object_get_ex(main_config, "trap-faults", &obj)
                        || json_object_get_boolean(obj)) < 0) {