This fix allows to register activator connection when
normal connection already exists for that name.
Also, when activator connection registers for a second name
(different than first one) name lookup will
result in no entry found and checking for multiple names
will not occur. So checking needs to be done earlier.

Signed-off-by: Michal Eljasiewicz <m.eljasie...@samsung.com>
---
 names.c | 14 +++++++++++---
 1 file changed, 11 insertions(+), 3 deletions(-)

diff --git a/names.c b/names.c
index c43960a..22ead9f 100644
--- a/names.c
+++ b/names.c
@@ -399,6 +399,13 @@ int kdbus_name_acquire(struct kdbus_name_registry *reg,
 
        mutex_lock(&conn->bus->lock);
        mutex_lock(&reg->entries_lock);
+
+       /* an activator can only own a single name */
+       if ((conn->flags & KDBUS_HELLO_ACTIVATOR) && conn->names > 0) {
+               ret = -EALREADY;
+               goto exit_unlock;
+       }
+
        e = __kdbus_name_lookup(reg, hash, name);
        if (e) {
                /* connection already owns that name */
@@ -407,9 +414,10 @@ int kdbus_name_acquire(struct kdbus_name_registry *reg,
                        goto exit_unlock;
                }
 
-               /* an activator can only own a single name */
-               if (conn->flags & KDBUS_HELLO_ACTIVATOR) {
-                       ret = -EALREADY;
+               /* activator registers for name that is already owned */
+               if (conn->flags & KDBUS_HELLO_ACTIVATOR &&
+                   e->activator == NULL) {
+                       e->activator = kdbus_conn_ref(conn);
                        goto exit_unlock;
                }
 
-- 
1.8.1.2

_______________________________________________
systemd-devel mailing list
systemd-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/systemd-devel

Reply via email to