diff --git a/src/libsystemd/sd-bus/bus-objects.c b/src/libsystemd/sd-bus/bus-objects.c index 0d4e75ccde..f5f67950c6 100644 --- a/src/libsystemd/sd-bus/bus-objects.c +++ b/src/libsystemd/sd-bus/bus-objects.c @@ -2088,7 +2088,6 @@ _public_ int sd_bus_emit_properties_changed_strv( const char *interface, char **names) { - BUS_DONT_DESTROY(bus); bool found_interface = false; char *prefix; int r; @@ -2109,6 +2108,8 @@ _public_ int sd_bus_emit_properties_changed_strv( if (names && names[0] == NULL) return 0; + BUS_DONT_DESTROY(bus); + do { bus->nodes_modified = false; @@ -2308,8 +2309,6 @@ static int object_added_append_all(sd_bus *bus, sd_bus_message *m, const char *p } _public_ int sd_bus_emit_object_added(sd_bus *bus, const char *path) { - BUS_DONT_DESTROY(bus); - _cleanup_(sd_bus_message_unrefp) sd_bus_message *m = NULL; struct node *object_manager; int r; @@ -2339,6 +2338,8 @@ _public_ int sd_bus_emit_object_added(sd_bus *bus, const char *path) { if (r == 0) return -ESRCH; + BUS_DONT_DESTROY(bus); + do { bus->nodes_modified = false; m = sd_bus_message_unref(m); @@ -2479,8 +2480,6 @@ static int object_removed_append_all(sd_bus *bus, sd_bus_message *m, const char } _public_ int sd_bus_emit_object_removed(sd_bus *bus, const char *path) { - BUS_DONT_DESTROY(bus); - _cleanup_(sd_bus_message_unrefp) sd_bus_message *m = NULL; struct node *object_manager; int r; @@ -2510,6 +2509,8 @@ _public_ int sd_bus_emit_object_removed(sd_bus *bus, const char *path) { if (r == 0) return -ESRCH; + BUS_DONT_DESTROY(bus); + do { bus->nodes_modified = false; m = sd_bus_message_unref(m); @@ -2643,8 +2644,6 @@ static int interfaces_added_append_one( } _public_ int sd_bus_emit_interfaces_added_strv(sd_bus *bus, const char *path, char **interfaces) { - BUS_DONT_DESTROY(bus); - _cleanup_(sd_bus_message_unrefp) sd_bus_message *m = NULL; struct node *object_manager; char **i; @@ -2667,6 +2666,8 @@ _public_ int sd_bus_emit_interfaces_added_strv(sd_bus *bus, const char *path, ch if (r == 0) return -ESRCH; + BUS_DONT_DESTROY(bus); + do { bus->nodes_modified = false; m = sd_bus_message_unref(m); diff --git a/src/libsystemd/sd-bus/sd-bus.c b/src/libsystemd/sd-bus/sd-bus.c index deb664540a..7787caaa4f 100644 --- a/src/libsystemd/sd-bus/sd-bus.c +++ b/src/libsystemd/sd-bus/sd-bus.c @@ -2884,7 +2884,6 @@ finish: } static int bus_process_internal(sd_bus *bus, bool hint_priority, int64_t priority, sd_bus_message **ret) { - BUS_DONT_DESTROY(bus); int r; /* Returns 0 when we didn't do anything. This should cause the @@ -2898,7 +2897,9 @@ static int bus_process_internal(sd_bus *bus, bool hint_priority, int64_t priorit /* We don't allow recursively invoking sd_bus_process(). */ assert_return(!bus->current_message, -EBUSY); - assert(!bus->current_slot); + assert(!bus->current_slot); /* This should be NULL whenever bus->current_message is */ + + BUS_DONT_DESTROY(bus); switch (bus->state) {