]> git.ipfire.org Git - thirdparty/suricata.git/commitdiff
pool now uses a queue kinda behaviour when getting/inserting data through poolbuckets.
authorAnoop Saldanha <anoopsaldanha@gmail.com>
Thu, 15 Nov 2012 16:41:34 +0000 (22:11 +0530)
committerVictor Julien <victor@inliniac.net>
Fri, 21 Jun 2013 13:15:12 +0000 (15:15 +0200)
src/util-pool.c
src/util-pool.h

index 7a3d775e4c307f4938402a550d81e8a474e65170..a8a372bba2800149607abce12c7cb2a3a9629f98 100644 (file)
@@ -168,6 +168,9 @@ Pool *PoolInit(uint32_t size, uint32_t prealloc_size, uint32_t elt_size,  void *
 
             pb->next = p->alloc_list;
             p->alloc_list = pb;
+            if (p->alloc_list_tail == NULL) {
+                p->alloc_list_tail = pb;
+            }
             p->alloc_list_size++;
         } else {
             PoolBucket *pb = p->empty_list;
@@ -188,6 +191,9 @@ Pool *PoolInit(uint32_t size, uint32_t prealloc_size, uint32_t elt_size,  void *
 
             pb->next = p->alloc_list;
             p->alloc_list = pb;
+            if (p->alloc_list_tail == NULL) {
+                p->alloc_list_tail = pb;
+            }
             p->alloc_list_size++;
         }
     }
@@ -222,6 +228,7 @@ void PoolFree(Pool *p) {
             SCFree(pb);
         }
     }
+    p->alloc_list_tail = NULL;
 
     while (p->empty_list != NULL) {
         PoolBucket *pb = p->empty_list;
@@ -262,6 +269,8 @@ void *PoolGet(Pool *p) {
     if (pb != NULL) {
         /* pull from the alloc list */
         p->alloc_list = pb->next;
+        if (pb->next == NULL)
+            p->alloc_list_tail = NULL;
         p->alloc_list_size--;
 
         /* put in the empty list */
@@ -331,8 +340,13 @@ void PoolReturn(Pool *p, void *data) {
     p->empty_list_size--;
 
     /* put in the alloc list */
-    pb->next = p->alloc_list;
-    p->alloc_list = pb;
+    pb->next = NULL;
+    if (p->alloc_list_tail == NULL) {
+        p->alloc_list = pb;
+    } else {
+        p->alloc_list_tail->next = pb;
+    }
+    p->alloc_list_tail = pb;
     p->alloc_list_size++;
 
     pb->data = data;
index c92d23cfa46362228325f7ca2d1e39f56d9ede2e..72dc85883d5c3302437288ddec158be4e3b59917 100644 (file)
@@ -46,6 +46,7 @@ typedef struct Pool_ {
     uint32_t allocated;
 
     PoolBucket *alloc_list;
+    PoolBucket *alloc_list_tail;
     uint32_t alloc_list_size;
 
     PoolBucket *empty_list;