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 {


--
_____________________________________________________________________
-- Bandwidth and Colocation Provided by http://www.api-digital.com --

svn-commits mailing list
To UNSUBSCRIBE or update options visit:
   http://lists.digium.com/mailman/listinfo/svn-commits

Reply via email to