]> git.ipfire.org Git - collecty.git/commitdiff
daemon: Generalize the init/exit functions
authorMichael Tremer <michael.tremer@ipfire.org>
Mon, 29 Sep 2025 17:50:02 +0000 (17:50 +0000)
committerMichael Tremer <michael.tremer@ipfire.org>
Mon, 29 Sep 2025 17:50:02 +0000 (17:50 +0000)
Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>
src/daemon/daemon.c

index bb3358fca66c9608b4327a2f584e65c60cb0e2e7..d45429e983a79567d5f31f8af39016603c7cde0f 100644 (file)
@@ -45,7 +45,8 @@ struct collecty_daemon {
                sd_event_source* sigterm;
                sd_event_source* sigint;
                sd_event_source* sighup;
-               sd_event_source* modules_init;
+               sd_event_source* init;
+               sd_event_source* exit;
        } events;
 
        // Bus
@@ -55,11 +56,21 @@ struct collecty_daemon {
        collecty_queue* queue;
 };
 
-static int collecty_daemon_modules_init(sd_event_source* source, void* data) {
-       collecty_daemon* daemon = data;
+static int collecty_daemon_init(sd_event_source* source, void* data) {
+       collecty_daemon* self = data;
+
+       DEBUG(self->ctx, "Initializing daemon...\n");
 
        // Initialize all modules
-       return collecty_modules_init(daemon->ctx, daemon);
+       return collecty_modules_init(self->ctx, self);
+}
+
+static int collecty_daemon_exit(sd_event_source* source, void* data) {
+       collecty_daemon* self = data;
+
+       DEBUG(self->ctx, "Cleaning up daemon...\n");
+
+       return 0;
 }
 
 static int collecty_daemon_terminate(sd_event_source* source,
@@ -118,11 +129,19 @@ static int collecty_daemon_setup_loop(collecty_daemon* self) {
                return r;
        }
 
-       // Initialize all modules when the loop starts
-       r = sd_event_add_defer(self->loop, &self->events.modules_init,
-                       collecty_daemon_modules_init, self);
+       // Initialize the daemon when the loop starts
+       r = sd_event_add_defer(self->loop, &self->events.init,
+                       collecty_daemon_init, self);
+       if (r < 0) {
+               ERROR(self->ctx, "Failed to register daemon init: %s\n", strerror(-r));
+               return r;
+       }
+
+       // Cleanup when the event loop exits
+       r = sd_event_add_exit(self->loop, &self->events.exit,
+                       collecty_daemon_exit, self);
        if (r < 0) {
-               ERROR(self->ctx, "Failed to register module init: %s\n", strerror(-r));
+               ERROR(self->ctx, "Failed to register daemon exit: %s\n", strerror(-r));
                return r;
        }
 
@@ -130,14 +149,16 @@ static int collecty_daemon_setup_loop(collecty_daemon* self) {
 }
 
 static void collecty_daemon_free(collecty_daemon* self) {
-       if (self->events.modules_init)
-               sd_event_source_unref(self->events.modules_init);
        if (self->events.sigterm)
                sd_event_source_unref(self->events.sigterm);
        if (self->events.sigint)
                sd_event_source_unref(self->events.sigint);
        if (self->events.sighup)
                sd_event_source_unref(self->events.sighup);
+       if (self->events.init)
+               sd_event_source_unref(self->events.init);
+       if (self->events.exit)
+               sd_event_source_unref(self->events.exit);
        if (self->queue)
                collecty_queue_unref(self->queue);
        if (self->ctx)