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
Xfce4-commits@xfce.org
http://foo-projects.org/mailman/listinfo/xfce4-commits

Reply via email to