From 962d3b9127971cc5d45d06bd885be3d212b05db6 Mon Sep 17 00:00:00 2001 From: Wim Taymans Date: Fri, 23 Apr 2021 11:19:25 +0200 Subject: [PATCH] modules: don't add CLIENT_ID when lingering Because the object is not destroyed when the client is destroyed and so the client.id might become invalid. --- src/modules/module-adapter.c | 9 ++++----- src/modules/spa/module-node-factory.c | 11 +++++------ 2 files changed, 9 insertions(+), 11 deletions(-) diff --git a/src/modules/module-adapter.c b/src/modules/module-adapter.c index edf6dce99..2f4b73d88 100644 --- a/src/modules/module-adapter.c +++ b/src/modules/module-adapter.c @@ -165,9 +165,11 @@ static void *create_object(void *_data, pw_properties_setf(properties, PW_KEY_FACTORY_ID, "%d", pw_impl_factory_get_info(d->this)->id); - client = resource ? pw_resource_get_client(resource): NULL; + str = pw_properties_get(properties, PW_KEY_OBJECT_LINGER); + linger = str ? pw_properties_parse_bool(str) : false; - if (client) { + client = resource ? pw_resource_get_client(resource): NULL; + if (client && !linger) { pw_properties_setf(properties, PW_KEY_CLIENT_ID, "%d", pw_impl_client_get_info(client)->id); } @@ -180,9 +182,6 @@ static void *create_object(void *_data, pw_properties_setf(properties, "audio.adapt.follower", "pointer:%p", follower); } - str = pw_properties_get(properties, PW_KEY_OBJECT_LINGER); - linger = str ? pw_properties_parse_bool(str) : false; - if (follower == NULL) { factory_name = pw_properties_get(properties, SPA_KEY_FACTORY_NAME); if (factory_name == NULL) diff --git a/src/modules/spa/module-node-factory.c b/src/modules/spa/module-node-factory.c index ce85dc627..6690824eb 100644 --- a/src/modules/spa/module-node-factory.c +++ b/src/modules/spa/module-node-factory.c @@ -117,18 +117,17 @@ static void *create_object(void *_data, if (factory_name == NULL) goto error_properties; - client = resource ? pw_resource_get_client(resource) : NULL; - pw_properties_setf(properties, PW_KEY_FACTORY_ID, "%d", pw_global_get_id(pw_impl_factory_get_global(data->this))); - if (client) { - pw_properties_setf(properties, PW_KEY_CLIENT_ID, "%d", - pw_global_get_id(pw_impl_client_get_global(client))); - } str = pw_properties_get(properties, PW_KEY_OBJECT_LINGER); linger = str ? pw_properties_parse_bool(str) : false; + client = resource ? pw_resource_get_client(resource) : NULL; + if (client && !linger) { + pw_properties_setf(properties, PW_KEY_CLIENT_ID, "%d", + pw_global_get_id(pw_impl_client_get_global(client))); + } node = pw_spa_node_load(context, factory_name, PW_SPA_NODE_FLAG_ACTIVATE,