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
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,
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;
}
}
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)