backport astobj2 race condition fix. This function is the exact same as trunk

so it applies here as well.


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.4@82198 65c4cc65-6c06-0410-ace0-fbb531ad65f3
This commit is contained in:
Russell Bryant
2007-09-10 19:53:17 +00:00
parent 4913548485
commit b8261abd0b

View File

@@ -513,6 +513,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;
@@ -553,14 +554,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.