mirror of
https://github.com/asterisk/asterisk.git
synced 2025-11-16 14:58:25 +00:00
New astobj2 flag for issuing a callback without locking the container.
git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@299135 65c4cc65-6c06-0410-ace0-fbb531ad65f3
This commit is contained in:
@@ -674,6 +674,12 @@ enum search_flags {
|
|||||||
* the hash value on the argument.
|
* the hash value on the argument.
|
||||||
*/
|
*/
|
||||||
OBJ_CONTINUE = (1 << 4),
|
OBJ_CONTINUE = (1 << 4),
|
||||||
|
/*!
|
||||||
|
* \brief By using this flag, the ao2_container being searched will _NOT_
|
||||||
|
* be locked. Only use this flag if the ao2_container is being protected
|
||||||
|
* by another mechanism other that the internal ao2_lock.
|
||||||
|
*/
|
||||||
|
OBJ_NOLOCK = (1 << 5),
|
||||||
};
|
};
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
|
|||||||
@@ -654,7 +654,10 @@ static void *internal_ao2_callback(struct ao2_container *c,
|
|||||||
last = i + 1;
|
last = i + 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
ao2_lock(c); /* avoid modifications to the content */
|
|
||||||
|
if (!(flags & OBJ_NOLOCK)) {
|
||||||
|
ao2_lock(c); /* avoid modifications to the content */
|
||||||
|
}
|
||||||
|
|
||||||
for (; i < last ; i++) {
|
for (; i < last ; i++) {
|
||||||
/* scan the list with prev-cur pointers */
|
/* scan the list with prev-cur pointers */
|
||||||
@@ -738,7 +741,10 @@ static void *internal_ao2_callback(struct ao2_container *c,
|
|||||||
last = start;
|
last = start;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
ao2_unlock(c);
|
|
||||||
|
if (!(flags & OBJ_NOLOCK)) {
|
||||||
|
ao2_unlock(c);
|
||||||
|
}
|
||||||
|
|
||||||
/* if multi_container was created, we are returning multiple objects */
|
/* if multi_container was created, we are returning multiple objects */
|
||||||
if (multi_container != NULL) {
|
if (multi_container != NULL) {
|
||||||
|
|||||||
Reference in New Issue
Block a user