From 905a8e655c4f50f655cbd90455b26a37b977c563 Mon Sep 17 00:00:00 2001 From: =?utf8?q?=D0=A0=D1=83=D1=81=D0=BB=D0=B0=D0=BD=20=D0=98=D0=B6=D0=B1?= =?utf8?q?=D1=83=D0=BB=D0=B0=D1=82=D0=BE=D0=B2?= Date: Thu, 31 Jul 2014 10:12:59 +0000 Subject: [PATCH] Ensure critial sections are released before returning https://bugzilla.gnome.org/show_bug.cgi?id=734035 --- gio/gregistrysettingsbackend.c | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/gio/gregistrysettingsbackend.c b/gio/gregistrysettingsbackend.c index 396159c..cf9da0b 100644 --- a/gio/gregistrysettingsbackend.c +++ b/gio/gregistrysettingsbackend.c @@ -1754,8 +1754,12 @@ watch_add_notify (GRegistryBackend *self, EnterCriticalSection (self->cache_lock); cache_node = registry_cache_get_node_for_key (self->cache_root, gsettings_prefix, TRUE); - g_return_val_if_fail (cache_node != NULL, FALSE); - g_return_val_if_fail (cache_node->data != NULL, FALSE); + if (cache_node == NULL || cache_node->data == NULL) + { + LeaveCriticalSection (self->cache_lock); + g_warn_if_reached (); + return FALSE; + } cache_item = cache_node->data; @@ -1764,6 +1768,7 @@ watch_add_notify (GRegistryBackend *self, { trace ("watch_add_notify: prefix %s already watched, %i subscribers.\n", gsettings_prefix, cache_item->subscription_count); + LeaveCriticalSection (self->cache_lock); return FALSE; } -- 2.7.4