afb-systemd: Isolate systemd main entries
[src/app-framework-binder.git] / src / afs-supervisor.c
index 8cf21cb..be0cdbf 100644 (file)
@@ -36,7 +36,7 @@
 #include <afb/afb-binding-v2.h>
 
 #include "afs-supervision.h"
-#include "afb-common.h"
+#include "afb-systemd.h"
 #include "afb-session.h"
 #include "afb-cred.h"
 #include "afb-stub-ws.h"
@@ -277,13 +277,17 @@ static void discovered_cb(void *closure, pid_t pid)
        struct supervised *s;
 
        s = supervised_of_pid(pid);
-       if (!s)
+       if (!s) {
+               (*(int*)closure)++;
                kill(pid, SIGHUP);
+       }
 }
 
-static void discover_supervised()
+static int discover_supervised()
 {
-       afs_discover("afb-daemon", discovered_cb, NULL);
+       int n = 0;
+       afs_discover("afb-daemon", discovered_cb, &n);
+       return n;
 }
 
 /**
@@ -335,7 +339,7 @@ static int init(const char *spec)
        }
 
        /* integrate the socket to the loop */
-       rc = sd_event_add_io(afb_common_get_event_loop(),
+       rc = sd_event_add_io(afb_systemd_get_event_loop(),
                                NULL, fd, EPOLLIN,
                                listening, NULL);
        if (rc < 0) {
@@ -411,6 +415,12 @@ static void f_list(struct afb_req req)
        afb_req_success(req, resu, NULL);
 }
 
+static void f_discover(struct afb_req req)
+{
+       discover_supervised();
+       afb_req_success(req, NULL, NULL);
+}
+
 static void propagate(struct afb_req req, const char *verb)
 {
        struct afb_xreq *xreq;
@@ -555,6 +565,13 @@ static const struct afb_verb_v2 _afb_verbs_v2_supervision[] = {
         .info = NULL,
         .session = AFB_SESSION_NONE_V2
     },
+    {
+        .verb = "discover",
+        .callback = f_discover,
+        .auth = &_afb_auths_v2_supervision[0],
+        .info = NULL,
+        .session = AFB_SESSION_NONE_V2
+    },
     { .verb = NULL }
 };