Merged revisions 140488 via svnmerge from
authorMark Michelson <mmichelson@digium.com>
Fri, 29 Aug 2008 17:47:17 +0000 (17:47 +0000)
committerMark Michelson <mmichelson@digium.com>
Fri, 29 Aug 2008 17:47:17 +0000 (17:47 +0000)
commit5dfefa5ee6e6a836f61a27d1d9348ff8564fba89
tree60afe0702c0b3d5e4620a3f0fe944af1b9852f67
parenta4e8af9af20365b3ac5c3da76976b7bdcc4719d4
Merged revisions 140488 via svnmerge from
https://origsvn.digium.com/svn/asterisk/branches/1.4

........
r140488 | mmichelson | 2008-08-29 12:34:17 -0500 (Fri, 29 Aug 2008) | 22 lines

After working on the ao2_containers branch, I noticed
something a bit strange. In all cases where we provide
a callback function to ao2_container_alloc, the callback
function would only return 0 or CMP_MATCH. After inspecting
the ao2_callback() code carefully, I found that if you're
only looking for one specific item, then you should return
CMP_MATCH | CMP_STOP. Otherwise, astobj2 will continue
traversing the current bucket until the end searching for
more matches.

In cases like chan_iax2 where in 1.4, all the peers are
shoved into a single bucket, this makes for potentially
terrible performance since the entire bucket will be
traversed even if the peer is one of the first ones come
across in the bucket.

All the changes I have made were for cases where the
callback function defined was passed to ao2_container_alloc
so that calls to ao2_find could find a unique instance
of whatever object was being stored in the container.

........

git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@140489 65c4cc65-6c06-0410-ace0-fbb531ad65f3
13 files changed:
apps/app_queue.c
channels/chan_console.c
channels/chan_iax2.c
channels/chan_sip.c
funcs/func_dialgroup.c
main/config.c
main/features.c
main/manager.c
main/taskprocessor.c
res/ais/lck.c
res/res_phoneprov.c
res/res_timing_pthread.c
utils/hashtest2.c