[systemd-devel] [PATCH] names: Acquiring name by activator connection logic fixed

Michal Eljasiewicz m.eljasiewic at samsung.com
Thu Feb 20 03:33:18 PST 2014


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.eljasiewic at 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



More information about the systemd-devel mailing list