From: Michael Tremer Date: Thu, 23 Oct 2025 09:29:37 +0000 (+0000) Subject: sources: Terminate the daemon if no sources have been loaded X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=1e3dbb589ff2ca8b35325e4c08c95f78672468d6;p=telemetry.git sources: Terminate the daemon if no sources have been loaded Signed-off-by: Michael Tremer --- diff --git a/src/daemon/daemon.c b/src/daemon/daemon.c index bf3d12b..4bc1943 100644 --- a/src/daemon/daemon.c +++ b/src/daemon/daemon.c @@ -92,7 +92,7 @@ static int td_daemon_init(sd_event_source* source, void* data) { return 0; } -static int td_daemon_exit(sd_event_source* source, void* data) { +static int td_daemon_on_exit(sd_event_source* source, void* data) { td_daemon* self = data; DEBUG(self->ctx, "Cleaning up daemon...\n"); @@ -210,7 +210,7 @@ static int td_daemon_setup_loop(td_daemon* self) { // Cleanup when the event loop exits r = sd_event_add_exit(self->loop, &self->events.exit, - td_daemon_exit, self); + td_daemon_on_exit, self); if (r < 0) { ERROR(self->ctx, "Failed to register daemon exit: %s\n", strerror(-r)); return r; @@ -381,6 +381,10 @@ ERROR: return 1; } +int td_daemon_exit(td_daemon* self, int rc) { + return sd_event_exit(self->loop, rc); +} + int td_daemon_submit_metrics(td_daemon* self, td_metrics* metrics) { return td_queue_submit_metrics(self->queue, metrics); } diff --git a/src/daemon/daemon.h b/src/daemon/daemon.h index 5610c5f..a34e712 100644 --- a/src/daemon/daemon.h +++ b/src/daemon/daemon.h @@ -44,6 +44,7 @@ td_sources* td_daemon_get_sources(td_daemon* self); td_graphs* td_daemon_get_graphs(td_daemon* self); int td_daemon_run(td_daemon* self); +int td_daemon_exit(td_daemon* self, int rc); int td_daemon_submit_metrics(td_daemon* self, td_metrics* metrics); diff --git a/src/daemon/sources.c b/src/daemon/sources.c index da920ee..9e3c8fe 100644 --- a/src/daemon/sources.c +++ b/src/daemon/sources.c @@ -139,6 +139,16 @@ static int td_sources_init(td_sources* self, char** enabled_sources) { source = NULL; } + // Abort if no sources have been enabled + if (!self->num_sources) { + ERROR(self->ctx, "No sources have been enabled\n"); + + // Terminate the daemon + return td_daemon_exit(self->daemon, -ENOTSUP); + } + + DEBUG(self->ctx, "%d source(s) have been enabled\n", self->num_sources); + return 0; ERROR: