From: Lennart Poettering Date: Wed, 7 Feb 2018 14:00:32 +0000 (+0100) Subject: dbus: split up bus_done() into seperate functions X-Git-Tag: v238~101^2~15 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=4502c403995df57c15b5c3d4b55ea58f24e2c0cc;p=platform%2Fupstream%2Fsystemd.git dbus: split up bus_done() into seperate functions No functional changes, but let's make this a bit more finegrained. (The individual functions are exported, which is used in a later commit) --- diff --git a/src/core/dbus.c b/src/core/dbus.c index 1c3fca3..c46c299 100644 --- a/src/core/dbus.c +++ b/src/core/dbus.c @@ -139,9 +139,10 @@ static int signal_disconnected(sd_bus_message *message, void *userdata, sd_bus_e assert_se(bus = sd_bus_message_get_bus(message)); if (bus == m->api_bus) - destroy_bus(m, &m->api_bus); + bus_done_api(m); if (bus == m->system_bus) - destroy_bus(m, &m->system_bus); + bus_done_system(m); + if (set_remove(m->private_buses, bus)) { log_debug("Got disconnect on private connection."); destroy_bus(m, &bus); @@ -1077,28 +1078,44 @@ static void destroy_bus(Manager *m, sd_bus **bus) { *bus = sd_bus_unref(*bus); } -void bus_done(Manager *m) { - sd_bus *b; - +void bus_done_api(Manager *m) { assert(m); if (m->api_bus) destroy_bus(m, &m->api_bus); +} + +void bus_done_system(Manager *m) { + assert(m); + if (m->system_bus) destroy_bus(m, &m->system_bus); +} + +void bus_done_private(Manager *m) { + sd_bus *b; + + assert(m); + while ((b = set_steal_first(m->private_buses))) destroy_bus(m, &b); m->private_buses = set_free(m->private_buses); - m->subscribed = sd_bus_track_unref(m->subscribed); - m->deserialized_subscribed = strv_free(m->deserialized_subscribed); + m->private_listen_event_source = sd_event_source_unref(m->private_listen_event_source); + m->private_listen_fd = safe_close(m->private_listen_fd); +} + +void bus_done(Manager *m) { + assert(m); - if (m->private_listen_event_source) - m->private_listen_event_source = sd_event_source_unref(m->private_listen_event_source); + bus_done_api(m); + bus_done_system(m); + bus_done_private(m); - m->private_listen_fd = safe_close(m->private_listen_fd); + assert(!m->subscribed); + m->deserialized_subscribed = strv_free(m->deserialized_subscribed); bus_verify_polkit_async_registry_free(m->polkit_registry); } diff --git a/src/core/dbus.h b/src/core/dbus.h index fe50fdd..17dfbc9 100644 --- a/src/core/dbus.h +++ b/src/core/dbus.h @@ -25,6 +25,10 @@ int bus_send_queued_message(Manager *m); int bus_init(Manager *m, bool try_bus_connect); + +void bus_done_private(Manager *m); +void bus_done_api(Manager *m); +void bus_done_system(Manager *m); void bus_done(Manager *m); int bus_fdset_add_all(Manager *m, FDSet *fds);