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; goto finish;
} }
sd_bus_flush(bus);
r = 0; r = 0;
finish: finish:

View file

@ -244,6 +244,7 @@ struct sd_bus {
sd_event_source *input_io_event_source; sd_event_source *input_io_event_source;
sd_event_source *output_io_event_source; sd_event_source *output_io_event_source;
sd_event_source *time_event_source; sd_event_source *time_event_source;
sd_event_source *quit_event_source;
sd_event *event; 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) if (r == SD_EVENT_FINISHED)
break; 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) if (r < 0)
return r; return r;

View file

@ -2208,6 +2208,16 @@ static int prepare_callback(sd_event_source *s, void *userdata) {
return 1; 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 sd_bus_attach_event(sd_bus *bus, sd_event *event, int priority) {
int r; int r;
@ -2251,6 +2261,10 @@ int sd_bus_attach_event(sd_bus *bus, sd_event *event, int priority) {
if (r < 0) if (r < 0)
goto fail; goto fail;
r = sd_event_add_quit(event, quit_callback, bus, &bus->quit_event_source);
if (r < 0)
goto fail;
return 0; return 0;
fail: fail:
@ -2271,6 +2285,9 @@ int sd_bus_detach_event(sd_bus *bus) {
if (bus->time_event_source) if (bus->time_event_source)
bus->time_event_source = sd_event_source_unref(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) if (bus->event)
bus->event = sd_event_unref(bus->event); bus->event = sd_event_unref(bus->event);

View file

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