X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=gio%2Fgregistrysettingsbackend.c;h=96df52c57c210c78574af66349cc3bdb3c67ae3d;hb=51fac05d73f8363de821eb0d6940dedca13a8c0f;hp=3b3f20a43ec86680001e94192bf5cb83a1d7184f;hpb=9f02ee790b03b4c9e73490734ddb4740219b1d36;p=platform%2Fupstream%2Fglib.git diff --git a/gio/gregistrysettingsbackend.c b/gio/gregistrysettingsbackend.c index 3b3f20a..96df52c 100644 --- a/gio/gregistrysettingsbackend.c +++ b/gio/gregistrysettingsbackend.c @@ -12,9 +12,7 @@ * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. + * License along with this library; if not, see . * * Author: Sam Thursfield */ @@ -97,9 +95,6 @@ #include "gsettingsbackend.h" #include "giomodule.h" - -#define _WIN32_WINNT 0x0500 -#define WIN32_LEAN_AND_MEAN #include //#define TRACE @@ -250,7 +245,7 @@ parse_key (const gchar *key_name, gchar *path_name, *c; /* All key paths are treated as absolute; gsettings doesn't seem to enforce a - * preceeding /. + * preceding /. */ if (key_name[0] == '/') key_name ++; @@ -495,7 +490,7 @@ registry_cache_unref_tree (GNode *tree) } } - +#if 0 static void registry_cache_dump (GNode *cache_node, gpointer data) @@ -518,7 +513,7 @@ registry_cache_dump (GNode *cache_node, g_node_children_foreach (cache_node, G_TRAVERSE_ALL, registry_cache_dump, GINT_TO_POINTER (new_depth)); } - +#endif typedef struct { @@ -621,7 +616,7 @@ registry_cache_get_node_for_key (GNode *root, if (key_name[0] == '/') key_name ++; - /* Ignore preceeding / */ + /* Ignore preceding / */ component = g_strdup (key_name); c = strchr (component, '/'); if (c != NULL) @@ -1377,7 +1372,7 @@ watch_handler (RegistryEvent *event) g_object_unref (event->self); g_slice_free (RegistryEvent, event); - return FALSE; + return G_SOURCE_REMOVE; }; @@ -1659,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); @@ -1690,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); @@ -1725,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); @@ -1746,7 +1734,9 @@ watch_add_notify (GRegistryBackend *self, WatchThreadState *watch = self->watch; GNode *cache_node; RegistryCacheItem *cache_item; +#ifdef TRACE DWORD result; +#endif g_return_val_if_fail (watch != NULL, FALSE); trace ("watch_add_notify: prefix %s.\n", gsettings_prefix); @@ -1757,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; @@ -1767,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; } @@ -1788,11 +1783,15 @@ watch_add_notify (GRegistryBackend *self, * one was received. If it takes > 200ms there is a possible race but the worst outcome is * a notification is ignored. */ - result = WaitForSingleObject (watch->message_received_event, 200); - #ifdef TRACE - if (result != WAIT_OBJECT_0) - trace ("watch thread is slow to respond - notification may not be added."); - #endif +#ifdef TRACE + result = +#endif + WaitForSingleObject (watch->message_received_event, 200); +#ifdef TRACE + if (result != WAIT_OBJECT_0) + trace ("watch thread is slow to respond - notification may not be added."); +#endif + LeaveCriticalSection (watch->message_lock); return TRUE; @@ -1912,11 +1911,6 @@ g_registry_backend_unsubscribe (GSettingsBackend *backend, * Object management junk ********************************************************************************/ -GSettingsBackend * -g_registry_backend_new (void) { - return g_object_new (G_TYPE_REGISTRY_BACKEND, NULL); -} - static void g_registry_backend_finalize (GObject *object) { @@ -1935,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); } @@ -1969,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; }