// Event Loop
sd_event* loop;
+ // Events
+ struct pakfire_daemon_events {
+ sd_event_source* sigterm;
+ sd_event_source* sigint;
+ sd_event_source* sigchld;
+ } events;
+
// dbus
sd_bus* bus;
int inhibitfd;
}
// Listen for SIGTERM
- r = sd_event_add_signal(self->loop, NULL, SIGTERM|SD_EVENT_SIGNAL_PROCMASK,
+ r = sd_event_add_signal(self->loop, &self->events.sigterm, SIGTERM|SD_EVENT_SIGNAL_PROCMASK,
pakfire_daemon_terminate, daemon);
if (r < 0) {
ERROR(self->ctx, "Could not register handling SIGTERM: %s\n", strerror(-r));
}
// Listen for SIGINT
- r = sd_event_add_signal(self->loop, NULL, SIGINT|SD_EVENT_SIGNAL_PROCMASK,
+ r = sd_event_add_signal(self->loop, &self->events.sigint, SIGINT|SD_EVENT_SIGNAL_PROCMASK,
pakfire_daemon_terminate, daemon);
if (r < 0) {
ERROR(self->ctx, "Could not register handling SIGINT: %s\n", strerror(-r));
}
// Listen for SIGCHLD
- r = sd_event_add_signal(self->loop, NULL, SIGCHLD|SD_EVENT_SIGNAL_PROCMASK,
+ r = sd_event_add_signal(self->loop, &self->events.sigchld, SIGCHLD|SD_EVENT_SIGNAL_PROCMASK,
pakfire_daemon_SIGCHLD, daemon);
if (r < 0) {
ERROR(self->ctx, "Could not register handling SIGCHLD: %s\n", strerror(-r));
// Release shutdown inhibition
pakfire_daemon_release_inhibit_shutdown(self);
+ // Events
+ 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.sigchld)
+ sd_event_source_unref(self->events.sigchld);
+
if (self->builder)
pakfire_builder_unref(self->builder);
if (self->client)