[asterisk-commits] irroot: branch irroot/distrotech-customers-trunk r334447 - /team/irroot/distr...

SVN commits to the Asterisk project asterisk-commits at lists.digium.com
Mon Sep 5 05:47:50 CDT 2011


Author: irroot
Date: Mon Sep  5 05:47:39 2011
New Revision: 334447

URL: http://svnview.digium.com/svn/asterisk?view=rev&rev=334447
Log:
Remove need for queues lock in try_calling it should be in compare_weight

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

Modified: team/irroot/distrotech-customers-trunk/apps/app_queue.c
URL: http://svnview.digium.com/svn/asterisk/team/irroot/distrotech-customers-trunk/apps/app_queue.c?view=diff&rev=334447&r1=334446&r2=334447
==============================================================================
--- team/irroot/distrotech-customers-trunk/apps/app_queue.c (original)
+++ team/irroot/distrotech-customers-trunk/apps/app_queue.c Mon Sep  5 05:47:39 2011
@@ -2982,9 +2982,8 @@
 	struct member *mem;
 	int found = 0;
 	struct ao2_iterator queue_iter;
-	
-	/* q's lock and rq's lock already set by try_calling()
-	 * to solve deadlock */
+
+	ao2_lock(queues);
 	queue_iter = ao2_iterator_init(queues, 0);
 	while ((q = ao2_t_iterator_next(&queue_iter, "Iterate through queues"))) {
 		if (q == rq) { /* don't check myself, could deadlock */
@@ -3009,6 +3008,7 @@
 		}
 	}
 	ao2_iterator_destroy(&queue_iter);
+	ao2_unlock(queues);
 	return found;
 }
 
@@ -4106,8 +4106,8 @@
 
 	struct member *mem;
 	struct call_queue *qtmp;
-	struct ao2_iterator queue_iter;	
-	
+	struct ao2_iterator queue_iter;
+
 	if (shared_lastcall) {
 		ao2_lock(queues);
 		queue_iter = ao2_iterator_init(queues, 0);
@@ -4450,7 +4450,6 @@
 	struct ao2_iterator memi;
 	struct ast_datastore *datastore, *transfer_ds;
 	struct queue_end_bridge *queue_end_bridge = NULL;
-	const int need_weight = use_weight;
 
 	ast_channel_lock(qe->chan);
 	datastore = ast_channel_datastore_find(qe->chan, &dialed_interface_info, NULL);
@@ -4534,8 +4533,6 @@
 	}
 
 	/* Hold the lock while we setup the outgoing calls */
-	if (need_weight)
-		ao2_lock(queues);
 	ao2_lock(qe->parent);
 	ast_debug(1, "%s is trying to call a queue member.\n",
 							qe->chan->name);
@@ -4554,8 +4551,6 @@
 			ao2_ref(cur, -1);
 			ao2_unlock(qe->parent);
 			ao2_iterator_destroy(&memi);
-			if (need_weight)
-				ao2_unlock(queues);
 			goto out;
 		}
 		if (!datastore) {
@@ -4563,8 +4558,6 @@
 				ao2_ref(cur, -1);
 				ao2_unlock(qe->parent);
 				ao2_iterator_destroy(&memi);
-				if (need_weight)
-					ao2_unlock(queues);
 				callattempt_free(tmp);
 				goto out;
 			}
@@ -4573,8 +4566,6 @@
 				ao2_ref(cur, -1);
 				ao2_unlock(&qe->parent);
 				ao2_iterator_destroy(&memi);
-				if (need_weight)
-					ao2_unlock(queues);
 				callattempt_free(tmp);
 				goto out;
 			}
@@ -4611,8 +4602,6 @@
 				ao2_ref(cur, -1);
 				ao2_unlock(qe->parent);
 				ao2_iterator_destroy(&memi);
-				if (need_weight)
-					ao2_unlock(queues);
 				callattempt_free(tmp);
 				goto out;
 			}
@@ -4674,9 +4663,6 @@
 	orig = to;
 	++qe->pending;
 	ao2_unlock(qe->parent);
-	if (need_weight) {
-		ao2_unlock(queues);
-	}
 	ring_one(qe, outgoing, &numbusies);
 	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




More information about the asterisk-commits mailing list