diff options
author | Steve Murphy <murf@digium.com> | 2007-09-10 16:19:45 +0000 |
---|---|---|
committer | Steve Murphy <murf@digium.com> | 2007-09-10 16:19:45 +0000 |
commit | 6cc72a0e0def08b205741c0fe3d9b55782bbb007 (patch) | |
tree | 0e3b90e4264e67cb50b8ca6d42bd2714a08d3158 | |
parent | 6ed072cb5a1c6649807093b79cccbcaa0ddefdaf (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.c | 6 |
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. |