From 851b4e474c393e93db40d26e58c4bada72db414e Mon Sep 17 00:00:00 2001 From: Russell Bryant Date: Wed, 22 Aug 2007 22:40:27 +0000 Subject: [PATCH] When converting this code to use the list macros, I changed it so objects are added to the head of a bucket instead of the tail. However, while looking over code with mmichelson, we noticed that the algorithm used in ao2_iterator_next requires that items are added to the tail. This wouldn't have caused any huge problem, but it wasn't correct. It meant that if an object was added to a container while you were iterating it, and it was added to the same bucket that the current element is in, then the new object would be returned by ao2_iterator_next, and any other objects in the bucket would be bypassed in the traversal. git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.4@80424 65c4cc65-6c06-0410-ace0-fbb531ad65f3 --- main/astobj2.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/main/astobj2.c b/main/astobj2.c index 9d2b0af2cc..4f338af44d 100644 --- a/main/astobj2.c +++ b/main/astobj2.c @@ -339,7 +339,7 @@ void *ao2_link(ao2_container *c, void *user_data) i %= c->n_buckets; p->astobj = obj; p->version = ast_atomic_fetchadd_int(&c->version, 1); - AST_LIST_INSERT_HEAD(&c->buckets[i], p, entry); + AST_LIST_INSERT_TAIL(&c->buckets[i], p, entry); ast_atomic_fetchadd_int(&c->elements, 1); ao2_unlock(c);