[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