Author: jannis
Date: 2007-02-06 14:00:51 +0000 (Tue, 06 Feb 2007)
New Revision: 24868
Modified:
libfrap/trunk/libfrap/menu/ChangeLog
libfrap/trunk/libfrap/menu/frap-menu-item-cache.c
libfrap/trunk/libfrap/menu/frap-menu.c
Log:
* frap-menu-item-cache.c: Add GMutex variable to the item cache and
lock the item cache in frap_menu_item_cache_lookup() which is the
only public function where the contents of the item cache may be
modified.
* frap-menu.c: Initialize GThread system in frap_menu_init ().
Modified: libfrap/trunk/libfrap/menu/ChangeLog
===================================================================
--- libfrap/trunk/libfrap/menu/ChangeLog 2007-02-06 13:35:13 UTC (rev
24867)
+++ libfrap/trunk/libfrap/menu/ChangeLog 2007-02-06 14:00:51 UTC (rev
24868)
@@ -1,3 +1,11 @@
+2007-02-06 Jannis Pohlmann <[EMAIL PROTECTED]>
+
+ * frap-menu-item-cache.c: Add GMutex variable to the item cache and
+ lock the item cache in frap_menu_item_cache_lookup() which is the
+ only public function where the contents of the item cache may be
+ modified.
+ * frap-menu.c: Initialize GThread system in frap_menu_init ().
+
2007-02-05 Jannis Pohlmann <[EMAIL PROTECTED]>
* tests/Makefile.am, tests/test-menu-spec.c: Test program for
Modified: libfrap/trunk/libfrap/menu/frap-menu-item-cache.c
===================================================================
--- libfrap/trunk/libfrap/menu/frap-menu-item-cache.c 2007-02-06 13:35:13 UTC
(rev 24867)
+++ libfrap/trunk/libfrap/menu/frap-menu-item-cache.c 2007-02-06 14:00:51 UTC
(rev 24868)
@@ -104,13 +104,16 @@
/* TDB context */
TDB_CONTEXT *context;
TDB_DATA data;
+
+ /* Mutex lock */
+ GMutex *lock;
};
struct _FrapMenuItemCache
{
GObject __parent__;
- /* < private > */
+ /* Private data */
FrapMenuItemCachePrivate *priv;
};
@@ -172,6 +175,9 @@
cache->priv = FRAP_MENU_ITEM_CACHE_GET_PRIVATE (cache);
+ /* Initialize the mutex lock */
+ cache->priv->lock = g_mutex_new ();
+
/* Create empty hash table */
cache->priv->items = g_hash_table_new_full (g_str_hash, g_str_equal, g_free,
(GDestroyNotify) frap_menu_item_unref);
@@ -224,6 +230,9 @@
if (G_LIKELY (cache->priv->context != NULL))
tdb_close (cache->priv->context);
+ /* Release mutex lock */
+ g_mutex_free (cache->priv->lock);
+
(*G_OBJECT_CLASS (frap_menu_item_cache_parent_class)->finalize) (object);
}
@@ -245,6 +254,11 @@
g_return_val_if_fail (g_path_is_absolute (filename), NULL);
g_return_val_if_fail (desktop_id != NULL, NULL);
+ /* Acquire lock on the item cache as it's likely that we need to load
+ * items from the hard drive and store it in the hash table of the
+ * item cache */
+ g_mutex_lock (cache->priv->lock);
+
/* Search filename in the hash table */
item = g_hash_table_lookup (cache->priv->items, filename);
@@ -259,6 +273,9 @@
/* Store updated item in cache */
frap_menu_item_cache_store_item (cache, filename, item);
+ /* Release item cache lock */
+ g_mutex_unlock (cache->priv->lock);
+
return item;
}
@@ -285,6 +302,9 @@
* counter */
g_object_ref (G_OBJECT (item));
+ /* Release item cache lock */
+ g_mutex_unlock (cache->priv->lock);
+
return item;
}
}
@@ -307,6 +327,9 @@
g_object_ref (G_OBJECT (item));
}
+ /* Release item cache lock */
+ g_mutex_unlock (cache->priv->lock);
+
return item;
}
Modified: libfrap/trunk/libfrap/menu/frap-menu.c
===================================================================
--- libfrap/trunk/libfrap/menu/frap-menu.c 2007-02-06 13:35:13 UTC (rev
24867)
+++ libfrap/trunk/libfrap/menu/frap-menu.c 2007-02-06 14:00:51 UTC (rev
24868)
@@ -83,6 +83,10 @@
/* Initialize the GObject type system */
g_type_init ();
+ /* Initialize the GThread system */
+ if (!g_thread_supported ())
+ g_thread_init (NULL);
+
/* Set desktop environment */
frap_menu_set_environment (env);
_______________________________________________
Xfce4-commits mailing list
[email protected]
http://foo-projects.org/mailman/listinfo/xfce4-commits