]> code.delx.au - pulseaudio/commitdiff
Make use of static flist for hashmap entry alllocation
authorLennart Poettering <lennart@poettering.net>
Fri, 13 Jul 2007 23:22:38 +0000 (23:22 +0000)
committerLennart Poettering <lennart@poettering.net>
Fri, 13 Jul 2007 23:22:38 +0000 (23:22 +0000)
git-svn-id: file:///home/lennart/svn/public/pulseaudio/branches/lennart@1519 fefdeb5f-60dc-0310-8127-8f9354f1896f

src/pulsecore/hashmap.c

index 818e12bf785fa19d3d5487f6ef901ebb7614a001..450f89ca99d8b72e787fc97812be84839de232cd 100644 (file)
@@ -33,6 +33,7 @@
 
 #include <pulsecore/idxset.h>
 #include <pulsecore/log.h>
+#include <pulsecore/flist.h>
 
 #include "hashmap.h"
 
@@ -55,6 +56,8 @@ struct pa_hashmap {
     pa_compare_func_t compare_func;
 };
 
+PA_STATIC_FLIST_DECLARE(entries, 0);
+
 pa_hashmap *pa_hashmap_new(pa_hash_func_t hash_func, pa_compare_func_t compare_func) {
     pa_hashmap *h;
 
@@ -88,7 +91,9 @@ static void remove(pa_hashmap *h, struct hashmap_entry *e) {
         h->data[e->hash] = e->bucket_next;
     }
 
-    pa_xfree(e);
+    if (pa_flist_push(PA_STATIC_FLIST_GET(entries), e) < 0)
+        pa_xfree(e);
+    
     h->n_entries--;
 }
 
@@ -127,7 +132,9 @@ int pa_hashmap_put(pa_hashmap *h, const void *key, void *value) {
     if ((e = get(h, hash, key)))
         return -1;
 
-    e = pa_xnew(struct hashmap_entry, 1);
+    if (!(e = pa_flist_pop(PA_STATIC_FLIST_GET(entries))))
+        e = pa_xnew(struct hashmap_entry, 1);
+    
     e->hash = hash;
     e->key = key;
     e->value = value;