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");
// 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;
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);
}
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);
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: