From 32809bd8c17c9c522338722177539aa3d60c4cbc Mon Sep 17 00:00:00 2001 From: Andrew Tridgell Date: Wed, 10 Feb 2010 15:53:58 -0800 Subject: util: rewrite dlinklist.h so that DLIST_ADD_END() is O(1) This changes the meaning of the ->prev pointer in our doubly linked lists to point at the end of the list from the front of the list. That allows us to implement DLIST_ADD_END() and related functions in O(1) time, which can be a huge saving in many places in Samba. This also means that the 'type' argument to various DLIST_*() macros is no longer needed, but I have left it in for now to keep the patchset small, which will make it easier to revert if any problems are found. In the future we should remove the 'type' arguments. (jra. Move the one use of DLIST_TAIL over to the new macros). --- source4/dsdb/samdb/ldb_modules/repl_meta_data.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) (limited to 'source4/dsdb/samdb') diff --git a/source4/dsdb/samdb/ldb_modules/repl_meta_data.c b/source4/dsdb/samdb/ldb_modules/repl_meta_data.c index e64d51aad0..67d7094d4c 100644 --- a/source4/dsdb/samdb/ldb_modules/repl_meta_data.c +++ b/source4/dsdb/samdb/ldb_modules/repl_meta_data.c @@ -3783,8 +3783,7 @@ static int replmd_prepare_commit(struct ldb_module *module) /* walk the list backwards, to do the first entry first, as we * added the entries with DLIST_ADD() which puts them at the * start of the list */ - DLIST_TAIL(replmd_private->la_list,la); - for (; la; la=prev) { + for (la = DLIST_TAIL(replmd_private->la_list); la; la=prev) { prev = DLIST_PREV(la); DLIST_REMOVE(replmd_private->la_list, la); ret = replmd_process_linked_attribute(module, la); -- cgit