From 85a0aa17dd870703677118726ac448ef08e8defb Mon Sep 17 00:00:00 2001 From: Lennart Poettering Date: Sat, 21 Dec 2013 01:02:23 +0100 Subject: [PATCH] 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. --- src/libsystemd-bus/bus-control.c | 21 ++++++++++----------- 1 file changed, 10 insertions(+), 11 deletions(-) diff --git a/src/libsystemd-bus/bus-control.c b/src/libsystemd-bus/bus-control.c index 333968aee..bbee1b5b1 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) { -- 2.30.2