bus: automatically flush bus queue when we exit the event loop

This way, we do not have to call it manually
This commit is contained in:
Lennart Poettering 2013-10-18 01:43:11 +02:00
parent b75b4db0af
commit abc5fe7250
5 changed files with 19 additions and 3 deletions

View File

@ -665,7 +665,6 @@ int main(int argc, char *argv[]) {
goto finish;
}
sd_bus_flush(bus);
r = 0;
finish:

View File

@ -244,6 +244,7 @@ struct sd_bus {
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;
};

View File

@ -83,7 +83,7 @@ int bus_event_loop_with_idle(sd_event *e, sd_bus *bus, const char *name, usec_t
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;

View File

@ -2208,6 +2208,16 @@ static int prepare_callback(sd_event_source *s, void *userdata) {
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;
@ -2251,6 +2261,10 @@ int sd_bus_attach_event(sd_bus *bus, sd_event *event, int priority) {
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:
@ -2271,6 +2285,9 @@ int sd_bus_detach_event(sd_bus *bus) {
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);

View File

@ -880,7 +880,6 @@ int main(int argc, char *argv[]) {
goto finish;
}
sd_bus_flush(bus);
r = 0;
finish: