[asterisk-commits] russell: branch 1.4 r80497 - in /branches/1.4: channels/ include/asterisk/ main/

SVN commits to the Asterisk project asterisk-commits at lists.digium.com
Thu Aug 23 11:53:52 CDT 2007


Author: russell
Date: Thu Aug 23 11:53:52 2007
New Revision: 80497

URL: http://svn.digium.com/view/asterisk?view=rev&rev=80497
Log:
This is a hack to maintain old behavior of chan_iax2.  This ensures that if
the peers and users are being stored in a linked list, that they go in the
list in the same order that the older code used.  This is necessary to maintain
the behavior of which peers and users get matched when traversing the container.

Modified:
    branches/1.4/channels/chan_iax2.c
    branches/1.4/include/asterisk/astobj2.h
    branches/1.4/main/astobj2.c

Modified: branches/1.4/channels/chan_iax2.c
URL: http://svn.digium.com/view/asterisk/branches/1.4/channels/chan_iax2.c?view=diff&rev=80497&r1=80496&r2=80497
==============================================================================
--- branches/1.4/channels/chan_iax2.c (original)
+++ branches/1.4/channels/chan_iax2.c Thu Aug 23 11:53:52 2007
@@ -9735,14 +9735,14 @@
 					/* Start with general parameters, then specific parameters, user and peer */
 					user = build_user(cat, gen, ast_variable_browse(ucfg, cat), 0);
 					if (user) {
-						ao2_link(users, user);
+						__ao2_link(users, user, (MAX_PEER_BUCKETS == 1) ? 1 : 0);
 						user = NULL;
 					}
 					peer = build_peer(cat, gen, ast_variable_browse(ucfg, cat), 0);
 					if (peer) {
 						if (ast_test_flag(peer, IAX_DYNAMIC))
 							reg_source_db(peer);
-						ao2_link(peers, peer);
+						__ao2_link(peers, peer, (MAX_PEER_BUCKETS == 1) ? 1 : 0);
 						peer = NULL;
 					}
 				}
@@ -9779,7 +9779,7 @@
 				if (!strcasecmp(utype, "user") || !strcasecmp(utype, "friend")) {
 					user = build_user(cat, ast_variable_browse(cfg, cat), NULL, 0);
 					if (user) {
-						ao2_link(users, user);
+						__ao2_link(users, user, (MAX_PEER_BUCKETS == 1) ? 1 : 0);
 						user = NULL;
 					}
 				}
@@ -9788,7 +9788,7 @@
 					if (peer) {
 						if (ast_test_flag(peer, IAX_DYNAMIC))
 							reg_source_db(peer);
-						ao2_link(peers, peer);
+						__ao2_link(peers, peer, (MAX_PEER_BUCKETS == 1) ? 1 : 0);
 						peer = NULL;
 					}
 				} else if (strcasecmp(utype, "user")) {

Modified: branches/1.4/include/asterisk/astobj2.h
URL: http://svn.digium.com/view/asterisk/branches/1.4/include/asterisk/astobj2.h?view=diff&rev=80497&r1=80496&r2=80497
==============================================================================
--- branches/1.4/include/asterisk/astobj2.h (original)
+++ branches/1.4/include/asterisk/astobj2.h Thu Aug 23 11:53:52 2007
@@ -368,8 +368,15 @@
  * This function insert an object in a container according its key.
  *
  * \note Remember to set the key before calling this function.
- */
-void *ao2_link(ao2_container *c, void *newobj);
+ *
+ * For Asterisk 1.4 only, there is a dirty hack here to ensure that chan_iax2
+ * can have objects linked in to the container at the head instead of tail
+ * when it is just a linked list.  This is to maintain some existing behavior
+ * where the order must be maintained as it was before this conversion so that
+ * matching behavior doesn't change.
+ */
+#define ao2_link(c, o) __ao2_link(c, o, 0)
+void *__ao2_link(ao2_container *c, void *newobj, int iax2_hack);
 void *ao2_unlink(ao2_container *c, void *newobj);
 
 /*! \struct Used as return value if the flag OBJ_MULTIPLE is set */

Modified: branches/1.4/main/astobj2.c
URL: http://svn.digium.com/view/asterisk/branches/1.4/main/astobj2.c?view=diff&rev=80497&r1=80496&r2=80497
==============================================================================
--- branches/1.4/main/astobj2.c (original)
+++ branches/1.4/main/astobj2.c Thu Aug 23 11:53:52 2007
@@ -316,7 +316,7 @@
 /*
  * link an object to a container
  */
-void *ao2_link(ao2_container *c, void *user_data)
+void *__ao2_link(ao2_container *c, void *user_data, int iax2_hack)
 {
 	int i;
 	/* create a new list entry */
@@ -339,7 +339,10 @@
 	i %= c->n_buckets;
 	p->astobj = obj;
 	p->version = ast_atomic_fetchadd_int(&c->version, 1);
-	AST_LIST_INSERT_TAIL(&c->buckets[i], p, entry);
+	if (iax2_hack)
+		AST_LIST_INSERT_HEAD(&c->buckets[i], p, entry);
+	else
+		AST_LIST_INSERT_TAIL(&c->buckets[i], p, entry);
 	ast_atomic_fetchadd_int(&c->elements, 1);
 	ao2_unlock(c);
 	




More information about the asterisk-commits mailing list