[systemd-devel] [PATCH] names: return EADDRINUSE if name is owned by a different connection and can't be released

Lukasz Skalski l.skalski at samsung.com
Mon Feb 9 01:53:10 PST 2015


This patch fixes also problem with "ReleaseName" call in
systemd-bus-proxyd.

diff --git a/names.c b/names.c
index 5f57aa3..e85ba45 100644
--- a/names.c
+++ b/names.c
@@ -266,6 +266,7 @@ static int kdbus_name_release(struct kdbus_name_registry *reg,
 		 * for items for connection.
 		 */
 
+		ret = -EADDRINUSE;
 		list_for_each_entry_safe(q, tmp, &e->queue_list, entry_entry) {
 			if (q->conn != conn)
 				continue;
diff --git a/test/test-names.c b/test/test-names.c
index 00c8ba0..66ebb47 100644
--- a/test/test-names.c
+++ b/test/test-names.c
@@ -54,6 +54,7 @@ static int conn_is_name_owner(const struct kdbus_conn *conn,
 
 int kdbus_test_name_basic(struct kdbus_test_env *env)
 {
+	struct kdbus_conn *conn;
 	char *name, *dot_name, *invalid_name, *wildcard_name;
 	int ret;
 
@@ -62,6 +63,14 @@ int kdbus_test_name_basic(struct kdbus_test_env *env)
 	invalid_name = "foo";
 	wildcard_name = "foo.bla.bl.*";
 
+	/* create a 2nd connection */
+	conn = kdbus_hello(env->buspath, 0, NULL, 0);
+	ASSERT_RETURN(conn != NULL);
+
+	/* acquire name "foo.bar.xxx" name */
+	ret = kdbus_name_acquire(conn, "foo.bar.xxx", NULL);
+	ASSERT_RETURN(ret == 0);
+
 	/* Name is not valid, must fail */
 	ret = kdbus_name_acquire(env->conn, dot_name, NULL);
 	ASSERT_RETURN(ret == -EINVAL);
@@ -92,7 +101,7 @@ int kdbus_test_name_basic(struct kdbus_test_env *env)
 
 	/* check that we can't release a name that we don't own */
 	ret = kdbus_name_release(env->conn, "foo.bar.xxx");
-	ASSERT_RETURN(ret == -ESRCH);
+	ASSERT_RETURN(ret == -EADDRINUSE);
 
 	/* Name is not valid, must fail */
 	ret = kdbus_name_release(env->conn, dot_name);
@@ -104,6 +113,8 @@ int kdbus_test_name_basic(struct kdbus_test_env *env)
 	ret = kdbus_name_release(env->conn, wildcard_name);
 	ASSERT_RETURN(ret == -ESRCH);
 
+	kdbus_conn_free(conn);
+
 	return TEST_OK;
 }
 
-- 
1.9.3



More information about the systemd-devel mailing list