summaryrefslogtreecommitdiff
path: root/gcache.c
diff options
context:
space:
mode:
authorOwen Taylor <otaylor@src.gnome.org>1998-12-15 05:28:02 +0000
committerOwen Taylor <otaylor@src.gnome.org>1998-12-15 05:28:02 +0000
commit931ea952650b013b834041b91b0c37a748ffd449 (patch)
tree0c97c450b0e07953d836f1603c6fcb0357a58149 /gcache.c
parentc8ba100dab8949c49097f11004c09ef36ea5136f (diff)
This commit merges the glib-threads branch into the main
branch. See the ChangeLog for details of the changes. In brief overview: - The set of threading functions can be set - A default implementation is provided in -lgthread - All static data structures are locked using these functions if g_thread_init() is called.
Diffstat (limited to 'gcache.c')
-rw-r--r--gcache.c11
1 files changed, 10 insertions, 1 deletions
diff --git a/gcache.c b/gcache.c
index b2fe77910..800bb2b13 100644
--- a/gcache.c
+++ b/gcache.c
@@ -16,6 +16,11 @@
* Free Software Foundation, Inc., 59 Temple Place - Suite 330,
* Boston, MA 02111-1307, USA.
*/
+
+/*
+ * MT safe
+ */
+
#include "glib.h"
@@ -56,7 +61,7 @@ static void g_cache_node_destroy (GCacheNode *node);
static GMemChunk *node_mem_chunk = NULL;
-
+static G_LOCK_DEFINE(node_mem_chunk);
GCache*
g_cache_new (GCacheNewFunc value_new_func,
@@ -193,11 +198,13 @@ g_cache_node_new (gpointer value)
{
GCacheNode *node;
+ g_lock (node_mem_chunk);
if (!node_mem_chunk)
node_mem_chunk = g_mem_chunk_new ("cache node mem chunk", sizeof (GCacheNode),
1024, G_ALLOC_AND_FREE);
node = g_chunk_new (GCacheNode, node_mem_chunk);
+ g_unlock (node_mem_chunk);
node->value = value;
node->ref_count = 1;
@@ -208,5 +215,7 @@ g_cache_node_new (gpointer value)
static void
g_cache_node_destroy (GCacheNode *node)
{
+ g_lock (node_mem_chunk);
g_mem_chunk_free (node_mem_chunk, node);
+ g_unlock (node_mem_chunk);
}