From f2e1ce533c9a073ef41095f75fd6d19312e59c2e Mon Sep 17 00:00:00 2001 From: jp9000 Date: Thu, 30 Jan 2014 12:29:13 -0700 Subject: [PATCH] Use mutex instead of variable for RC check --- libobs/obs-scene.c | 25 ++++++++++++++++++------- 1 file changed, 18 insertions(+), 7 deletions(-) diff --git a/libobs/obs-scene.c b/libobs/obs-scene.c index a8513d259..96f995433 100644 --- a/libobs/obs-scene.c +++ b/libobs/obs-scene.c @@ -331,19 +331,30 @@ int obs_sceneitem_release(obs_sceneitem_t item) void obs_sceneitem_remove(obs_sceneitem_t item) { obs_scene_t scene; + bool was_removed; - if (item->removed) + if (!item) return; - item->removed = true; - - signal_item_remove(item); - scene = item->parent; - pthread_mutex_lock(&scene->mutex); + if (scene) + pthread_mutex_lock(&scene->mutex); + + was_removed = item->removed; + item->removed = true; + + if (was_removed) { + if (scene) + pthread_mutex_unlock(&scene->mutex); + return; + } + + signal_item_remove(item); detach_sceneitem(item); - pthread_mutex_unlock(&scene->mutex); + + if (scene) + pthread_mutex_unlock(&scene->mutex); obs_sceneitem_release(item); }