lib: Put "results_store" into a doubly linked list
authorVolker Lendecke <vl@samba.org>
Mon, 7 May 2018 14:41:55 +0000 (16:41 +0200)
committerJeremy Allison <jra@samba.org>
Tue, 15 May 2018 04:32:40 +0000 (06:32 +0200)
Bug: https://bugzilla.samba.org/show_bug.cgi?id=13362
Signed-off-by: Volker Lendecke <vl@samba.org>
Reviewed-by: Jeremy Allison <jra@samba.org>
lib/ldb/modules/paged_results.c

index de014a3969976f0849f349325bf140faa548699d..aafbcbf448354445dd0366888fc22212de04d2ac 100644 (file)
@@ -35,6 +35,7 @@
 #include "replace.h"
 #include "system/filesys.h"
 #include "system/time.h"
+#include "dlinklist.h"
 #include "ldb_module.h"
 
 struct message_store {
@@ -48,14 +49,13 @@ struct message_store {
 struct private_data;
 
 struct results_store {
+       struct results_store *prev, *next;
 
        struct private_data *priv;
 
        char *cookie;
        time_t timestamp;
 
-       struct results_store *next;
-
        struct message_store *first;
        struct message_store *last;
        int num_entries;
@@ -75,22 +75,8 @@ struct private_data {
 static int store_destructor(struct results_store *del)
 {
        struct private_data *priv = del->priv;
-       struct results_store *loop;
-
-       if (priv->store == del) {
-               priv->store = del->next;
-               return 0;
-       }
-
-       for (loop = priv->store; loop; loop = loop->next) {
-               if (loop->next == del) {
-                       loop->next = del->next;
-                       return 0;
-               }
-       }
-
-       /* is not in list ? */
-       return -1;
+       DLIST_REMOVE(priv->store, del);
+       return 0;
 }
 
 static struct results_store *new_store(struct private_data *priv)
@@ -120,8 +106,7 @@ static struct results_store *new_store(struct private_data *priv)
        newr->first_ref = NULL;
        newr->controls = NULL;
 
-       newr->next = priv->store;
-       priv->store = newr;
+       DLIST_ADD(priv->store, newr);
 
        talloc_set_destructor(newr, store_destructor);