[svn-commits] jrose: branch jrose/bridge_projects r380966 - in /team/jrose/bridge_projects:...

SVN commits to the Digium repositories svn-commits at lists.digium.com
Wed Feb 6 09:51:37 CST 2013


Author: jrose
Date: Wed Feb  6 09:51:35 2013
New Revision: 380966

URL: http://svnview.digium.com/svn/asterisk?view=rev&rev=380966
Log:
Add a depart_end state and don't change to hangup when the bridge is already ended/departed

Modified:
    team/jrose/bridge_projects/include/asterisk/bridging.h
    team/jrose/bridge_projects/main/bridging.c
    team/jrose/bridge_projects/main/features.c

Modified: team/jrose/bridge_projects/include/asterisk/bridging.h
URL: http://svnview.digium.com/svn/asterisk/team/jrose/bridge_projects/include/asterisk/bridging.h?view=diff&rev=380966&r1=380965&r2=380966
==============================================================================
--- team/jrose/bridge_projects/include/asterisk/bridging.h (original)
+++ team/jrose/bridge_projects/include/asterisk/bridging.h Wed Feb  6 09:51:35 2013
@@ -93,6 +93,8 @@
 	AST_BRIDGE_CHANNEL_STATE_HANGUP,
 	/*! Bridged channel was ast_bridge_depart() from the bridge without being hung up */
 	AST_BRIDGE_CHANNEL_STATE_DEPART,
+	/*! Bridged channel was ast_bridge_depart() from the bridge during AST_BRIDGE_CHANNEL_STATE_END without being hung up */
+	AST_BRIDGE_CHANNEL_STATE_DEPART_END,
 };
 
 /*! \brief Return values for bridge technology write function */

Modified: team/jrose/bridge_projects/main/bridging.c
URL: http://svnview.digium.com/svn/asterisk/team/jrose/bridge_projects/main/bridging.c?view=diff&rev=380966&r1=380965&r2=380966
==============================================================================
--- team/jrose/bridge_projects/main/bridging.c (original)
+++ team/jrose/bridge_projects/main/bridging.c Wed Feb  6 09:51:35 2013
@@ -1387,8 +1387,13 @@
 	ast_channel_internal_bridge_set(bridge_channel->chan, NULL);
 
 	/* See if we need to dissolve the bridge itself if they hung up */
-	if (bridge_channel->state == AST_BRIDGE_CHANNEL_STATE_END) {
+	switch (bridge_channel->state) {
+	case AST_BRIDGE_CHANNEL_STATE_END:
+	case AST_BRIDGE_CHANNEL_STATE_DEPART_END:
 		bridge_check_dissolve(bridge_channel->bridge, bridge_channel);
+		break;
+	default:
+		break;
 	}
 
 	/* Tell the bridge technology we are leaving so they tear us down */
@@ -1404,7 +1409,8 @@
 	AST_LIST_REMOVE(&bridge_channel->bridge->channels, bridge_channel, entry);
 
 	if (bridge_channel->depart_wait
-		&& bridge_channel->state != AST_BRIDGE_CHANNEL_STATE_DEPART) {
+		&& bridge_channel->state != AST_BRIDGE_CHANNEL_STATE_DEPART
+		&& bridge_channel->state != AST_BRIDGE_CHANNEL_STATE_DEPART_END) {
 		/* Put the channel into the ast_bridge_depart wait list. */
 		AST_LIST_INSERT_TAIL(&bridge_channel->bridge->depart_wait, bridge_channel, entry);
 	}
@@ -1626,7 +1632,16 @@
 				ao2_unlock(bridge);
 				return -1;
 			}
-			ast_bridge_change_state(bridge_channel, AST_BRIDGE_CHANNEL_STATE_DEPART);
+			ao2_lock(bridge_channel);
+			switch (bridge_channel->state) {
+			case AST_BRIDGE_CHANNEL_STATE_END:
+				ast_bridge_change_state_nolock(bridge_channel, AST_BRIDGE_CHANNEL_STATE_DEPART_END);
+				break;
+			default:
+				ast_bridge_change_state_nolock(bridge_channel, AST_BRIDGE_CHANNEL_STATE_DEPART);
+				break;
+			}
+			ao2_unlock(bridge_channel);
 			break;
 		}
 
@@ -1964,7 +1979,13 @@
 		ast_stream_and_wait(bridge_channel->chan, limits->duration_sound, "");
 	}
 
-	ast_bridge_change_state(bridge_channel, AST_BRIDGE_CHANNEL_STATE_HANGUP);
+	ao2_lock(bridge_channel);
+
+	if (bridge_channel->state == AST_BRIDGE_CHANNEL_STATE_WAIT){
+		ast_bridge_change_state_nolock(bridge_channel, AST_BRIDGE_CHANNEL_STATE_HANGUP);
+	}
+
+	ao2_unlock(bridge_channel);
 
 	return -1;
 }

Modified: team/jrose/bridge_projects/main/features.c
URL: http://svnview.digium.com/svn/asterisk/team/jrose/bridge_projects/main/features.c?view=diff&rev=380966&r1=380965&r2=380966
==============================================================================
--- team/jrose/bridge_projects/main/features.c (original)
+++ team/jrose/bridge_projects/main/features.c Wed Feb  6 09:51:35 2013
@@ -4419,6 +4419,7 @@
 	}
 
 	caller_limits->duration = callee_limits->duration = config->timelimit;
+	callee_limits->duration += 250;
 }
 
 /*!




More information about the svn-commits mailing list