* Free Software Foundation, Inc., 59 Temple Place - Suite 330,
* Boston, MA 02111-1307, USA.
*/
+
+/*
+ * Modified by the GLib Team and others 1997-1999. See the AUTHORS
+ * file for a list of people on the GLib Team. See the ChangeLog
+ * files for a list of changes. These files are distributed with
+ * GLib at ftp://ftp.gtk.org/pub/gtk/.
+ */
+
+/*
+ * MT safe
+ */
+
#include "glib.h"
static GMemChunk *node_mem_chunk = NULL;
-
+G_LOCK_DEFINE_STATIC (node_mem_chunk);
GCache*
g_cache_new (GCacheNewFunc value_new_func,
key = g_hash_table_lookup (rcache->value_table, value);
node = g_hash_table_lookup (rcache->key_table, key);
+ if (node == NULL)
+ return;
+
node->ref_count -= 1;
if (node->ref_count == 0)
{
{
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;
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);
}