[asterisk-commits] irroot: branch irroot/distrotech-customers-1.8 r334434 - /team/irroot/distrot...

SVN commits to the Asterisk project asterisk-commits at lists.digium.com
Sun Sep 4 04:43:24 CDT 2011


Author: irroot
Date: Sun Sep  4 04:43:13 2011
New Revision: 334434

URL: http://svnview.digium.com/svn/asterisk?view=rev&rev=334434
Log:
Deadlock fixes for ASTERISK-18101

Modified:
    team/irroot/distrotech-customers-1.8/apps/app_queue.c

Modified: team/irroot/distrotech-customers-1.8/apps/app_queue.c
URL: http://svnview.digium.com/svn/asterisk/team/irroot/distrotech-customers-1.8/apps/app_queue.c?view=diff&rev=334434&r1=334433&r2=334434
==============================================================================
--- team/irroot/distrotech-customers-1.8/apps/app_queue.c (original)
+++ team/irroot/distrotech-customers-1.8/apps/app_queue.c Sun Sep  4 04:43:13 2011
@@ -4109,6 +4109,7 @@
 	struct ao2_iterator queue_iter;	
 	
 	if (shared_lastcall) {
+		ao2_lock(queues);
 		queue_iter = ao2_iterator_init(queues, 0);
 		while ((qtmp = ao2_t_iterator_next(&queue_iter, "Iterate through queues"))) {
 			ao2_lock(qtmp);
@@ -4122,6 +4123,7 @@
 			queue_t_unref(qtmp, "Done with iterator");
 		}
 		ao2_iterator_destroy(&queue_iter);
+		ao2_unlock(queues);
 	} else {
 		ao2_lock(q);
 		time(&member->lastcall);
@@ -4672,9 +4674,10 @@
 	orig = to;
 	++qe->pending;
 	ao2_unlock(qe->parent);
+	if (need_weight) {
+		ao2_unlock(queues);
+	}
 	ring_one(qe, outgoing, &numbusies);
-	if (need_weight)
-		ao2_unlock(queues);
 	lpeer = wait_for_answer(qe, outgoing, &to, &digit, numbusies, ast_test_flag(&(bridge_config.features_caller), AST_FEATURE_DISCONNECT), forwardsallowed, update_connectedline);
 	/* The ast_channel_datastore_remove() function could fail here if the
 	 * datastore was moved to another channel during a masquerade. If this is




More information about the asterisk-commits mailing list