sd-bus: make add match method callback slot "floating"
When we allocate an asynchronous match object we will allocate an asynchronous bus call object to install the match server side. Previously the call slot would be created as regular slot, i.e. non-floating which meant installing the match even if it was itself floating would result in a non-floating slot to be created internally, which ultimately would mean the sd_bus object would be referenced by it, and thus never be freed. Let's fix that by making the match method callback floating in any case as we have no interest in leaving the bus allocated beyond the match slot. Fixes: #8551
This commit is contained in:
parent
7ae497b936
commit
fc2d4c89b8
|
@ -3227,13 +3227,21 @@ static int bus_add_match_full(
|
|||
goto finish;
|
||||
}
|
||||
|
||||
if (asynchronous)
|
||||
if (asynchronous) {
|
||||
r = bus_add_match_internal_async(bus,
|
||||
&s->match_callback.install_slot,
|
||||
s->match_callback.match_string,
|
||||
add_match_callback,
|
||||
s);
|
||||
else
|
||||
|
||||
if (r < 0)
|
||||
return r;
|
||||
|
||||
/* Make the slot of the match call floating now. We need the reference, but we don't
|
||||
* want that this match pins the bus object, hence we first create it non-floating, but
|
||||
* then make it floating. */
|
||||
r = sd_bus_slot_set_floating(s->match_callback.install_slot, true);
|
||||
} else
|
||||
r = bus_add_match_internal(bus, s->match_callback.match_string);
|
||||
if (r < 0)
|
||||
goto finish;
|
||||
|
|
Loading…
Reference in New Issue