diff options
author | Lennart Poettering <lennart@poettering.net> | 2017-12-20 12:50:43 +0100 |
---|---|---|
committer | Sven Eden <yamakuzure@gmx.net> | 2018-05-30 07:50:00 +0200 |
commit | e76525789cf3b027b34a28902838dd4238673756 (patch) | |
tree | 8f85f727119569f21f6f494e4ff6dead009debac /src/libelogind/sd-bus/sd-bus.c | |
parent | ef02e13a94aa70904b62c70236ef82ec0e4f2fec (diff) |
sd-bus: log about bus state changes
Let's unify all state changes in a new helper function, from which we
can then debug log all state changes
Diffstat (limited to 'src/libelogind/sd-bus/sd-bus.c')
-rw-r--r-- | src/libelogind/sd-bus/sd-bus.c | 35 |
1 files changed, 29 insertions, 6 deletions
diff --git a/src/libelogind/sd-bus/sd-bus.c b/src/libelogind/sd-bus/sd-bus.c index ca4075af6..ccbe3d57e 100644 --- a/src/libelogind/sd-bus/sd-bus.c +++ b/src/libelogind/sd-bus/sd-bus.c @@ -457,6 +457,29 @@ static int synthesize_connected_signal(sd_bus *bus) { return 0; } +void bus_set_state(sd_bus *bus, enum bus_state state) { + + static const char * const table[_BUS_STATE_MAX] = { + [BUS_UNSET] = "UNSET", + [BUS_WATCH_BIND] = "WATCH_BIND", + [BUS_OPENING] = "OPENING", + [BUS_AUTHENTICATING] = "AUTHENTICATING", + [BUS_HELLO] = "HELLO", + [BUS_RUNNING] = "RUNNING", + [BUS_CLOSING] = "CLOSING", + [BUS_CLOSED] = "CLOSED", + }; + + assert(bus); + assert(state < _BUS_STATE_MAX); + + if (state == bus->state) + return; + + log_debug("Bus %s: changing state %s → %s", strna(bus->description), table[bus->state], table[state]); + bus->state = state; +} + static int hello_callback(sd_bus_message *reply, void *userdata, sd_bus_error *error) { const char *s; sd_bus *bus; @@ -483,7 +506,7 @@ static int hello_callback(sd_bus_message *reply, void *userdata, sd_bus_error *e return -ENOMEM; if (bus->state == BUS_HELLO) { - bus->state = BUS_RUNNING; + bus_set_state(bus, BUS_RUNNING); r = synthesize_connected_signal(bus); if (r < 0) @@ -537,11 +560,11 @@ int bus_start_running(sd_bus *bus) { } if (bus->bus_client) { - bus->state = BUS_HELLO; + bus_set_state(bus, BUS_HELLO); return 1; } - bus->state = BUS_RUNNING; + bus_set_state(bus, BUS_RUNNING); r = synthesize_connected_signal(bus); if (r < 0) @@ -1095,7 +1118,7 @@ _public_ int sd_bus_start(sd_bus *bus) { assert_return(bus->state == BUS_UNSET, -EPERM); assert_return(!bus_pid_changed(bus), -ECHILD); - bus->state = BUS_OPENING; + bus_set_state(bus, BUS_OPENING); if (bus->is_server && bus->bus_client) return -EINVAL; @@ -1418,7 +1441,7 @@ _public_ void sd_bus_close(sd_bus *bus) { if (bus_pid_changed(bus)) return; - bus->state = BUS_CLOSED; + bus_set_state(bus, BUS_CLOSED); sd_bus_detach_event(bus); @@ -1447,7 +1470,7 @@ void bus_enter_closing(sd_bus *bus) { if (!IN_SET(bus->state, BUS_WATCH_BIND, BUS_OPENING, BUS_AUTHENTICATING, BUS_HELLO, BUS_RUNNING)) return; - bus->state = BUS_CLOSING; + bus_set_state(bus, BUS_CLOSING); } _public_ sd_bus *sd_bus_ref(sd_bus *bus) { |