]> git.ipfire.org Git - thirdparty/asterisk.git/commitdiff
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 5e61d5e5f1e260df736b1eeab848d81bff8911e7..5f4cda91ebad83b9d8150419863622ed170be5ea 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