diff options
author | Yu Watanabe <watanabe.yu+github@gmail.com> | 2018-07-08 23:09:18 +0900 |
---|---|---|
committer | Sven Eden <sven.eden@prydeworx.com> | 2018-10-29 10:18:22 +0100 |
commit | 07c663a6c59a0571be9e407d10b9a82b46ecb578 (patch) | |
tree | 81e8f4cb5eb8b40dc9cf14d703dd35cb318f35c2 /src | |
parent | 4dec19b4d2051593098eaa507d812b4fc9defc91 (diff) |
sd-bus: unref slot->match_callback.install_slot when slot is disconnected
When a slot is disconnected, then slot->match_callback.install_slot
is also disconnected. So, bus_slot_disconnect() removes the install_slot
from the list of slots in bus, although it is a floating object.
This makes install_slot unreffed from bus when it is disconnected.
Fixes #9505 and #9510.
(cherry picked from commit 20d4ee2cbc21e0c4d2dd6c01d5a18a4cf0d98222)
Diffstat (limited to 'src')
-rw-r--r-- | src/libelogind/sd-bus/bus-slot.c | 5 |
1 files changed, 4 insertions, 1 deletions
diff --git a/src/libelogind/sd-bus/bus-slot.c b/src/libelogind/sd-bus/bus-slot.c index fbf37320d..679006135 100644 --- a/src/libelogind/sd-bus/bus-slot.c +++ b/src/libelogind/sd-bus/bus-slot.c @@ -81,7 +81,10 @@ void bus_slot_disconnect(sd_bus_slot *slot) { (void) bus_remove_match_internal(slot->bus, slot->match_callback.match_string); if (slot->match_callback.install_slot) { - bus_slot_disconnect(slot->match_callback.install_slot); + if (slot->match_callback.install_slot->bus) { + bus_slot_disconnect(slot->match_callback.install_slot); + sd_bus_slot_unref(slot->match_callback.install_slot); + } slot->match_callback.install_slot = sd_bus_slot_unref(slot->match_callback.install_slot); } |