[svn-commits] mmichelson: branch mmichelson/bridged_channel r395808 - /team/mmichelson/brid...

SVN commits to the Digium repositories svn-commits at lists.digium.com
Tue Jul 30 16:22:30 CDT 2013


Author: mmichelson
Date: Tue Jul 30 16:22:28 2013
New Revision: 395808

URL: http://svnview.digium.com/svn/asterisk?view=rev&rev=395808
Log:
Remove chan_sip and chan_skinny's uses of ast_bridged_call


Modified:
    team/mmichelson/bridged_channel/channels/chan_sip.c
    team/mmichelson/bridged_channel/channels/chan_skinny.c

Modified: team/mmichelson/bridged_channel/channels/chan_sip.c
URL: http://svnview.digium.com/svn/asterisk/team/mmichelson/bridged_channel/channels/chan_sip.c?view=diff&rev=395808&r1=395807&r2=395808
==============================================================================
--- team/mmichelson/bridged_channel/channels/chan_sip.c (original)
+++ team/mmichelson/bridged_channel/channels/chan_sip.c Tue Jul 30 16:22:28 2013
@@ -7270,7 +7270,7 @@
 			}
 
 			if (!p->pendinginvite) {
-				struct ast_channel *bridge = ast_bridged_channel(oldowner);
+				RAII_VAR(struct ast_channel *, bridge, ast_channel_bridge_peer(oldowner), ast_channel_cleanup);
 				char quality_buf[AST_MAX_USER_FIELD], *quality;
 
 				/* We need to get the lock on bridge because ast_rtp_instance_set_stats_vars will attempt
@@ -7281,7 +7281,6 @@
 					do {
 						CHANNEL_DEADLOCK_AVOIDANCE(oldowner);
 					} while (sip_pvt_trylock(p));
-					bridge = ast_bridged_channel(oldowner);
 				}
 
 				if (p->rtp) {
@@ -18006,10 +18005,22 @@
 
 	/* Give useful transfer information to the dialplan */
 	if (transferer->owner) {
-		struct ast_channel *peer = ast_bridged_channel(transferer->owner);
+		RAII_VAR(struct ast_channel *, peer, ast_channel_bridge_peer(transferer->owner), ast_channel_cleanup);
+
+		/*! pbx_builtin_setvar_helper will attempt to lock the channel. We need
+		 * to be sure it's already locked here so we don't deadlock.
+		 */
+		while (peer && ast_channel_trylock(peer)) {
+			sip_pvt_unlock(transferer);
+			do {
+				CHANNEL_DEADLOCK_AVOIDANCE(transferer->owner);
+			} while (sip_pvt_trylock(transferer));
+		}
+
 		if (peer) {
 			pbx_builtin_setvar_helper(peer, "SIPREFERRINGCONTEXT", transferer->context);
 			pbx_builtin_setvar_helper(peer, "SIPREFERREDBYHDR", p_referred_by);
+			ast_channel_unlock(peer);
 		}
 	}
 
@@ -26350,7 +26361,6 @@
 {
 	struct ast_channel *c=NULL;
 	int res;
-	struct ast_channel *bridged_to;
 	const char *required;
 
 	/* If we have an INCOMING invite that we haven't answered, terminate that transaction */
@@ -26371,7 +26381,7 @@
 	/* Get RTCP quality before end of call */
 	if (p->do_history || p->owner) {
 		char quality_buf[AST_MAX_USER_FIELD], *quality;
-		struct ast_channel *bridge = p->owner ? ast_bridged_channel(p->owner) : NULL;
+		RAII_VAR(struct ast_channel *, bridge, p->owner ? ast_channel_bridge_peer(p->owner) : NULL, ast_channel_cleanup);
 
 		/* We need to get the lock on bridge because ast_rtp_instance_set_stats_vars will attempt
 		 * to lock the bridge. This may get hairy...
@@ -26384,7 +26394,6 @@
 				usleep(1);
 				sip_pvt_lock(p);
 			} while (p->owner && ast_channel_trylock(p->owner));
-			bridge = p->owner ? ast_bridged_channel(p->owner) : NULL;
 		}
 
 
@@ -26448,7 +26457,7 @@
 		if (!res) {
 			c = p->owner;
 			if (c) {
-				bridged_to = ast_bridged_channel(c);
+				RAII_VAR(struct ast_channel *, bridged_to, ast_channel_bridge_peer(c), ast_channel_cleanup);
 				if (bridged_to) {
 					/* Don't actually hangup here... */
 					ast_queue_unhold(c);

Modified: team/mmichelson/bridged_channel/channels/chan_skinny.c
URL: http://svnview.digium.com/svn/asterisk/team/mmichelson/bridged_channel/channels/chan_skinny.c?view=diff&rev=395808&r1=395807&r2=395808
==============================================================================
--- team/mmichelson/bridged_channel/channels/chan_skinny.c (original)
+++ team/mmichelson/bridged_channel/channels/chan_skinny.c Tue Jul 30 16:22:28 2013
@@ -4356,10 +4356,12 @@
 				l->label);
 			if (verbose) {
 				AST_LIST_TRAVERSE(&l->sub, sub, list) {
+					RAII_VAR(struct ast_channel *, bridged, ast_channel_bridge_peer(sub->owner), ao2_cleanup);
+
 					ast_cli(fd, "  %s> %s to %s\n",
 						(sub == l->activesub?"Active  ":"Inactive"),
 						ast_channel_name(sub->owner),
-						(ast_bridged_channel(sub->owner)?ast_channel_name(ast_bridged_channel(sub->owner)):"")
+						bridged ? ast_channel_name(bridged) : ""
 					);
 				}
 			}
@@ -6410,10 +6412,13 @@
 		SKINNY_DEBUG(DEBUG_PACKET, 3, "Received STIMULUS_CALLPARK from %s, inst %d, callref %d\n",
 			d->name, instance, callreference);
 
-		if ((sub && sub->owner) && (ast_channel_state(sub->owner) ==  AST_STATE_UP)){
+		if ((sub && sub->owner) && (ast_channel_state(sub->owner) ==  AST_STATE_UP)) {
+			RAII_VAR(struct ast_channel *, bridged, NULL, ast_channel_cleanup);
+
 			c = sub->owner;
-			if (ast_bridged_channel(c)) {
-				if (!ast_masq_park_call(ast_bridged_channel(c), c, 0, &extout)) {
+			bridged = ast_channel_bridge_peer(c);
+			if (bridged) {
+				if (!ast_masq_park_call(bridged, c, 0, &extout)) {
 					snprintf(message, sizeof(message), "Call Parked at: %d", extout);
 					transmit_displaynotify(d, message, 10);
 				} else {
@@ -7148,9 +7153,12 @@
 			d->name, instance, callreference);
 
 		if ((sub && sub->owner) && (ast_channel_state(sub->owner) ==  AST_STATE_UP)){
+			RAII_VAR(struct ast_channel *, bridged, NULL, ast_channel_cleanup);
+
 			c = sub->owner;
-			if (ast_bridged_channel(c)) {
-				if (!ast_masq_park_call(ast_bridged_channel(c), c, 0, &extout)) {
+			bridged = ast_channel_bridge_peer(c);
+			if (bridged) {
+				if (!ast_masq_park_call(bridged, c, 0, &extout)) {
 					snprintf(message, sizeof(message), "Call Parked at: %d", extout);
 					transmit_displaynotify(d, message, 10);
 				} else {




More information about the svn-commits mailing list