X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?p=elogind.git;a=blobdiff_plain;f=src%2Flibsystemd-bus%2Fbus-control.c;fp=src%2Flibsystemd-bus%2Fbus-control.c;h=bbee1b5b130a1e361bb182ae3d07e24406d63370;hp=333968aee4a6a46401a6f86b4e46f73cabccd77e;hb=85a0aa17dd870703677118726ac448ef08e8defb;hpb=d86f9d5285742e959a158e743799506b5339fefc 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) {