[systemd-commits] src/libsystemd-bus
Lennart Poettering
lennart at kemper.freedesktop.org
Fri Dec 20 16:06:14 PST 2013
src/libsystemd-bus/bus-control.c | 21 ++++++++++-----------
1 file changed, 10 insertions(+), 11 deletions(-)
New commits:
commit 85a0aa17dd870703677118726ac448ef08e8defb
Author: Lennart Poettering <lennart at poettering.net>
Date: Sat Dec 21 01:02:23 2013 +0100
bus: when watching bus names, we always need to add a change match
Since for the kernel change of ownership of a name between starter and
real client is a change and for userspace thats addition/removal, we
need to unconditionally subscribe to these change events.
diff --git a/src/libsystemd-bus/bus-control.c b/src/libsystemd-bus/bus-control.c
index 333968a..bbee1b5 100644
--- a/src/libsystemd-bus/bus-control.c
+++ b/src/libsystemd-bus/bus-control.c
@@ -820,17 +820,16 @@ static int add_name_change_match(sd_bus *bus,
return -errno;
}
- /* If the neither name is explicitly set to
- * the empty string, then this can match
- * against changed names */
- if (!(old_owner && old_owner[0] == 0) &&
- !(new_owner && new_owner[0] == 0)) {
- item->type = KDBUS_ITEM_NAME_CHANGE;
-
- r = ioctl(bus->input_fd, KDBUS_CMD_MATCH_ADD, m);
- if (r < 0)
- return -errno;
- }
+ /* The CHANGE match we need in either case, because
+ * what is reported as a name change by the kernel
+ * might just be an owner change between starter and
+ * normal clients. For userspace such a change should
+ * be considered a removal/addition, hence let's
+ * subscribe to this unconditionally. */
+ item->type = KDBUS_ITEM_NAME_CHANGE;
+ r = ioctl(bus->input_fd, KDBUS_CMD_MATCH_ADD, m);
+ if (r < 0)
+ return -errno;
}
if (is_name_id != 0) {
More information about the systemd-commits
mailing list