From 04f77d2565a3108dac0fd36015d20c85961962d0 Mon Sep 17 00:00:00 2001 From: Wim Taymans Date: Fri, 19 Jan 2018 11:31:05 +0100 Subject: [PATCH] global: only unregister when it was registered --- src/pipewire/global.c | 21 ++++++++++++--------- 1 file changed, 12 insertions(+), 9 deletions(-) diff --git a/src/pipewire/global.c b/src/pipewire/global.c index 9157918f2..d28d25c8c 100644 --- a/src/pipewire/global.c +++ b/src/pipewire/global.c @@ -83,6 +83,7 @@ pw_global_new(struct pw_core *core, this->bind = bind; this->object = object; this->properties = properties; + this->id = SPA_ID_INVALID; pw_log_debug("global %p: new %s", this, spa_type_map_get_type(core->type.map, this->type)); @@ -236,17 +237,19 @@ void pw_global_destroy(struct pw_global *global) pw_log_debug("global %p: destroy %u", global, global->id); - spa_list_for_each(registry, &core->registry_resource_list, link) { - uint32_t permissions = pw_global_get_permissions(global, registry->client); - if (PW_PERM_IS_R(permissions)) - pw_registry_resource_global_remove(registry, global->id); + if (global->id != SPA_ID_INVALID) { + spa_list_for_each(registry, &core->registry_resource_list, link) { + uint32_t permissions = pw_global_get_permissions(global, registry->client); + if (PW_PERM_IS_R(permissions)) + pw_registry_resource_global_remove(registry, global->id); + } + + pw_map_remove(&core->globals, global->id); + + spa_list_remove(&global->link); + spa_hook_list_call(&core->listener_list, struct pw_core_events, global_removed, global); } - pw_map_remove(&core->globals, global->id); - - spa_list_remove(&global->link); - spa_hook_list_call(&core->listener_list, struct pw_core_events, global_removed, global); - if (global->properties) pw_properties_free(global->properties);