From 19eb6c738462b29fba27011c34caac9ee3e7b5ee Mon Sep 17 00:00:00 2001
From: Stefan Schmidt <sst@sil.at>
Date: Thu, 5 May 2011 07:09:20 +0000
Subject: [PATCH] Adding the Move to Front Hash functionality

Moving a found object to the front of its bucket to reduce the necessary traversal steps to find an object. This change improves the search time on large system with many data or in link lists.

(closes issue #19233)
Reported by: schmidts

Review: https://reviewboard.asterisk.org/r/1201/



git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@316962 65c4cc65-6c06-0410-ace0-fbb531ad65f3
---
 main/astobj2.c | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/main/astobj2.c b/main/astobj2.c
index 5e61d5e5f1..5f4cda91eb 100644
--- a/main/astobj2.c
+++ b/main/astobj2.c
@@ -734,6 +734,10 @@ static void *internal_ao2_callback(struct ao2_container *c,
 				}
 				ast_free(cur);	/* free the link record */
 			}
+			if ((match) && (!(flags & OBJ_UNLINK))) {
+				AST_LIST_REMOVE_CURRENT(entry);
+				AST_LIST_INSERT_HEAD(&c->buckets[i], cur, entry);
+			}
 
 			if ((match & CMP_STOP) || !(flags & OBJ_MULTIPLE)) {
 				/* We found our only (or last) match, so force an exit from
-- 
GitLab