summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSteve Murphy <murf@digium.com>2007-09-10 16:19:45 +0000
committerSteve Murphy <murf@digium.com>2007-09-10 16:19:45 +0000
commit6cc72a0e0def08b205741c0fe3d9b55782bbb007 (patch)
tree0e3b90e4264e67cb50b8ca6d42bd2714a08d3158
parent6ed072cb5a1c6649807093b79cccbcaa0ddefdaf (diff)
Changes applied from marta's team/marta/astobj2 branch to solve a race condition
git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@82124 65c4cc65-6c06-0410-ace0-fbb531ad65f3
-rw-r--r--main/astobj2.c6
1 files changed, 4 insertions, 2 deletions
diff --git a/main/astobj2.c b/main/astobj2.c
index cc357f176..5050d8c2c 100644
--- a/main/astobj2.c
+++ b/main/astobj2.c
@@ -501,6 +501,7 @@ void * ao2_iterator_next(struct ao2_iterator *a)
{
int lim;
struct bucket_list *p = NULL;
+ void *ret = NULL;
if (INTERNAL_OBJ(a->c) == NULL)
return NULL;
@@ -541,14 +542,15 @@ found:
a->version = p->version;
a->obj = p;
a->c_version = a->c->version;
+ ret = EXTERNAL_OBJ(p->astobj);
/* inc refcount of returned object */
- ao2_ref(EXTERNAL_OBJ(p->astobj), 1);
+ ao2_ref(ret, 1);
}
if (!(a->flags & F_AO2I_DONTLOCK))
ao2_unlock(a->c);
- return p ? EXTERNAL_OBJ(p->astobj) : NULL;
+ return ret;
}
/* callback for destroying container.