mirror of
https://github.com/systemd/systemd.git
synced 2024-11-05 15:21:37 +03:00
sd-bus: support SD_BUS_DEFAULT* and don't crash in functions where bus is optional
In those functions where bus defaults to the m->bus, we should also resolve the magic parameters. And if neither called with bus=NULL and an unattached message, return properly instead of crashing in assert later.
This commit is contained in:
parent
501ecd670c
commit
70bc558cc1
@ -1899,9 +1899,10 @@ _public_ int sd_bus_send(sd_bus *bus, sd_bus_message *_m, uint64_t *cookie) {
|
||||
|
||||
assert_return(m, -EINVAL);
|
||||
|
||||
if (!bus)
|
||||
bus = m->bus;
|
||||
|
||||
if (bus)
|
||||
assert_return(bus = bus_resolve(bus), -ENOPKG);
|
||||
else
|
||||
assert_return(bus = m->bus, -ENOTCONN);
|
||||
assert_return(!bus_pid_changed(bus), -ECHILD);
|
||||
|
||||
if (!BUS_IS_OPEN(bus->state))
|
||||
@ -1983,9 +1984,10 @@ _public_ int sd_bus_send_to(sd_bus *bus, sd_bus_message *m, const char *destinat
|
||||
|
||||
assert_return(m, -EINVAL);
|
||||
|
||||
if (!bus)
|
||||
bus = m->bus;
|
||||
|
||||
if (bus)
|
||||
assert_return(bus = bus_resolve(bus), -ENOPKG);
|
||||
else
|
||||
assert_return(bus = m->bus, -ENOTCONN);
|
||||
assert_return(!bus_pid_changed(bus), -ECHILD);
|
||||
|
||||
if (!BUS_IS_OPEN(bus->state))
|
||||
@ -2048,9 +2050,10 @@ _public_ int sd_bus_call_async(
|
||||
assert_return(m->header->type == SD_BUS_MESSAGE_METHOD_CALL, -EINVAL);
|
||||
assert_return(!m->sealed || (!!callback == !(m->header->flags & BUS_MESSAGE_NO_REPLY_EXPECTED)), -EINVAL);
|
||||
|
||||
if (!bus)
|
||||
bus = m->bus;
|
||||
|
||||
if (bus)
|
||||
assert_return(bus = bus_resolve(bus), -ENOPKG);
|
||||
else
|
||||
assert_return(bus = m->bus, -ENOTCONN);
|
||||
assert_return(!bus_pid_changed(bus), -ECHILD);
|
||||
|
||||
if (!BUS_IS_OPEN(bus->state))
|
||||
@ -2154,9 +2157,10 @@ _public_ int sd_bus_call(
|
||||
bus_assert_return(!(m->header->flags & BUS_MESSAGE_NO_REPLY_EXPECTED), -EINVAL, error);
|
||||
bus_assert_return(!bus_error_is_dirty(error), -EINVAL, error);
|
||||
|
||||
if (!bus)
|
||||
bus = m->bus;
|
||||
|
||||
if (bus)
|
||||
assert_return(bus = bus_resolve(bus), -ENOPKG);
|
||||
else
|
||||
assert_return(bus = m->bus, -ENOTCONN);
|
||||
bus_assert_return(!bus_pid_changed(bus), -ECHILD, error);
|
||||
|
||||
if (!BUS_IS_OPEN(bus->state)) {
|
||||
|
Loading…
Reference in New Issue
Block a user