Adding the Move to Front Hash functionality
authorStefan Schmidt <sst@sil.at>
Thu, 5 May 2011 07:09:20 +0000 (07:09 +0000)
committerStefan Schmidt <sst@sil.at>
Thu, 5 May 2011 07:09:20 +0000 (07:09 +0000)
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

index 5e61d5e..5f4cda9 100644 (file)
@@ -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