sd_event_source *input_io_event_source;
sd_event_source *output_io_event_source;
sd_event_source *time_event_source;
+ sd_event_source *quit_event_source;
sd_event *event;
};
if (r == SD_EVENT_FINISHED)
break;
- r = sd_event_run(e, exiting ? (uint64_t) -1 : DEFAULT_EXIT_USEC);
+ r = sd_event_run(e, exiting ? (uint64_t) -1 : timeout);
if (r < 0)
return r;
return 1;
}
+static int quit_callback(sd_event_source *event, void *userdata) {
+ sd_bus *bus = userdata;
+
+ assert(event);
+
+ sd_bus_flush(bus);
+
+ return 1;
+}
+
int sd_bus_attach_event(sd_bus *bus, sd_event *event, int priority) {
int r;
if (r < 0)
goto fail;
+ r = sd_event_add_quit(event, quit_callback, bus, &bus->quit_event_source);
+ if (r < 0)
+ goto fail;
+
return 0;
fail:
if (bus->time_event_source)
bus->time_event_source = sd_event_source_unref(bus->time_event_source);
+ if (bus->quit_event_source)
+ bus->quit_event_source = sd_event_source_unref(bus->quit_event_source);
+
if (bus->event)
bus->event = sd_event_unref(bus->event);