gnetworkaddress: Add g_network_address_new_loopback() constructor
[platform/upstream/glib.git] / gio / gregistrysettingsbackend.c
index 396159c..96df52c 100644 (file)
@@ -1654,9 +1654,6 @@ watch_start (GRegistryBackend *self)
 
   g_return_val_if_fail (self->watch == NULL, FALSE);
 
-  self->cache_lock = g_slice_new (CRITICAL_SECTION);
-  InitializeCriticalSection (self->cache_lock);
-
   watch = g_slice_new (WatchThreadState);
   watch->owner = G_SETTINGS_BACKEND (self);
 
@@ -1685,8 +1682,6 @@ watch_start (GRegistryBackend *self)
   return TRUE;
 
 fail_2:
-  DeleteCriticalSection (self->cache_lock);
-  g_slice_free (CRITICAL_SECTION, self->cache_lock);
   DeleteCriticalSection (watch->message_lock);
   g_slice_free (CRITICAL_SECTION, watch->message_lock);
   CloseHandle (watch->message_sent_event);
@@ -1720,9 +1715,7 @@ watch_stop_unlocked (GRegistryBackend *self)
 
   LeaveCriticalSection (watch->message_lock);
   DeleteCriticalSection (watch->message_lock);
-  DeleteCriticalSection (self->cache_lock);
   g_slice_free (CRITICAL_SECTION, watch->message_lock);
-  g_slice_free (CRITICAL_SECTION, self->cache_lock);
   CloseHandle (watch->message_sent_event);
   CloseHandle (watch->message_received_event);
   CloseHandle (watch->thread);
@@ -1754,8 +1747,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 +1761,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;
     }
 
@@ -1931,6 +1929,9 @@ g_registry_backend_finalize (GObject *object)
       watch_stop_unlocked (self);
     }
 
+  DeleteCriticalSection (self->cache_lock);
+  g_slice_free (CRITICAL_SECTION, self->cache_lock);
+
   g_free (self->base_path);
 }
 
@@ -1965,5 +1966,8 @@ g_registry_backend_init (GRegistryBackend *self)
   item->ref_count = 1;
   self->cache_root = g_node_new (item);
 
+  self->cache_lock = g_slice_new (CRITICAL_SECTION);
+  InitializeCriticalSection (self->cache_lock);
+
   self->watch = NULL;
 }