[asterisk-commits] russell: branch 1.2 r58164 - /branches/1.2/manager.c

asterisk-commits at lists.digium.com asterisk-commits at lists.digium.com
Tue Mar 6 17:20:14 MST 2007


Author: russell
Date: Tue Mar  6 18:20:13 2007
New Revision: 58164

URL: http://svn.digium.com/view/asterisk?view=rev&rev=58164
Log:
If the channels acquired using the manager Redirect action are not up, then
don't attempt to do anything with them.  It could lead to weird behavior,
including crashes.  (issue #8977)

Modified:
    branches/1.2/manager.c

Modified: branches/1.2/manager.c
URL: http://svn.digium.com/view/asterisk/branches/1.2/manager.c?view=diff&rev=58164&r1=58163&r2=58164
==============================================================================
--- branches/1.2/manager.c (original)
+++ branches/1.2/manager.c Tue Mar  6 18:20:13 2007
@@ -879,6 +879,11 @@
 		return 0;
 	}
 	chan = ast_get_channel_by_name_locked(name);
+	if (chan->_state != AST_STATE_UP) {
+		astman_send_error(s, m, "Redirect failed, channel not up.\n");
+		ast_mutex_unlock(&chan->lock);
+		return 0;
+	}
 	if (!chan) {
 		char buf[BUFSIZ];
 		snprintf(buf, sizeof(buf), "Channel does not exist: %s", name);
@@ -887,6 +892,12 @@
 	}
 	if (!ast_strlen_zero(name2))
 		chan2 = ast_get_channel_by_name_locked(name2);
+	if (chan2 && chan2->_state != AST_STATE_UP) {
+		astman_send_error(s, m, "Redirect failed, extra channel not up.\n");
+		ast_mutex_unlock(&chan->lock);
+		ast_mutex_unlock(&chan2->lock);
+		return 0;
+	}
 	res = ast_async_goto(chan, context, exten, pi);
 	if (!res) {
 		if (!ast_strlen_zero(name2)) {



More information about the asterisk-commits mailing list