diff --git a/src/modules/module-protocol-native.c b/src/modules/module-protocol-native.c index dd7fda868..14226a6e7 100644 --- a/src/modules/module-protocol-native.c +++ b/src/modules/module-protocol-native.c @@ -320,6 +320,9 @@ static void on_start(void *data, uint32_t version) pw_log_debug("version %d", version); + if (client->core_resource != NULL) + pw_resource_remove(client->core_resource); + if (pw_global_bind(pw_impl_core_get_global(client->core), client, PW_PERM_RWX, version, 0) < 0) return; diff --git a/src/pipewire/private.h b/src/pipewire/private.h index 7a1d720ac..8280dbba1 100644 --- a/src/pipewire/private.h +++ b/src/pipewire/private.h @@ -952,8 +952,6 @@ int pw_proxy_init(struct pw_proxy *proxy, const char *type, uint32_t version); void pw_proxy_remove(struct pw_proxy *proxy); -void pw_resource_remove(struct pw_resource *resource); - int pw_context_recalc_graph(struct pw_context *context); void pw_impl_port_update_info(struct pw_impl_port *port, const struct spa_port_info *info); diff --git a/src/pipewire/resource.c b/src/pipewire/resource.c index 1951de65b..45a002f40 100644 --- a/src/pipewire/resource.c +++ b/src/pipewire/resource.c @@ -271,6 +271,7 @@ void pw_resource_destroy(struct pw_resource *resource) free(resource); } +SPA_EXPORT void pw_resource_remove(struct pw_resource *resource) { resource->removed = true; diff --git a/src/pipewire/resource.h b/src/pipewire/resource.h index 9ed777511..ec675d421 100644 --- a/src/pipewire/resource.h +++ b/src/pipewire/resource.h @@ -87,6 +87,10 @@ pw_resource_new(struct pw_impl_client *client, /**< the client owning the resour /** Destroy a resource */ void pw_resource_destroy(struct pw_resource *resource); +/** Remove a resource, like pw_resource_destroy but without sending a + * remove_id message to the client */ +void pw_resource_remove(struct pw_resource *resource); + /** Get the client owning this resource */ struct pw_impl_client *pw_resource_get_client(struct pw_resource *resource);