[svn-commits] trunk - r7710 in /trunk: ./ apps/app_mixmonitor.c

svn-commits at lists.digium.com svn-commits at lists.digium.com
Mon Jan 2 01:41:03 CST 2006


Author: tilghman
Date: Mon Jan  2 01:41:02 2006
New Revision: 7710

URL: http://svn.digium.com/view/asterisk?rev=7710&view=rev
Log:
Merged revisions 7709 via svnmerge from
/branches/1.2

Modified:
    trunk/   (props changed)
    trunk/apps/app_mixmonitor.c

Propchange: trunk/
------------------------------------------------------------------------------
--- svnmerge-integrated (original)
+++ svnmerge-integrated Mon Jan  2 01:41:02 2006
@@ -1,1 +1,1 @@
-/branches/1.2:1-7489,7491-7496,7498-7516,7518-7528,7530-7545,7547-7549,7551,7553-7556,7558-7579,7581-7585,7587-7594,7596-7604,7606-7640,7642-7662,7664-7665,7677
+/branches/1.2:1-7489,7491-7496,7498-7516,7518-7528,7530-7545,7547-7549,7551,7553-7556,7558-7579,7581-7585,7587-7594,7596-7604,7606-7640,7642-7662,7664-7665,7677,7709

Modified: trunk/apps/app_mixmonitor.c
URL: http://svn.digium.com/view/asterisk/trunk/apps/app_mixmonitor.c?rev=7710&r1=7709&r2=7710&view=diff
==============================================================================
--- trunk/apps/app_mixmonitor.c (original)
+++ trunk/apps/app_mixmonitor.c Mon Jan  2 01:41:02 2006
@@ -86,6 +86,7 @@
 static const char *mixmonitor_spy_type = "MixMonitor";
 
 struct mixmonitor {
+	AST_LIST_ENTRY(mixmonitor) list;
 	struct ast_channel *chan;
 	char *filename;
 	char *post_process;
@@ -94,12 +95,15 @@
 	int writevol;
 };
 
+AST_LIST_HEAD_STATIC(monitors, mixmonitor);
+
 enum {
 	MUXFLAG_APPEND = (1 << 1),
 	MUXFLAG_BRIDGED = (1 << 2),
 	MUXFLAG_VOLUME = (1 << 3),
 	MUXFLAG_READVOLUME = (1 << 4),
 	MUXFLAG_WRITEVOLUME = (1 << 5),
+	FLAG_STOP = (1 << 6),
 } mixmonitor_flags;
 
 enum {
@@ -163,6 +167,10 @@
 	char post_process[1024] = "";
 	
 	STANDARD_INCREMENT_USECOUNT;
+
+	AST_LIST_LOCK(&monitors);
+	AST_LIST_INSERT_HEAD(&monitors, mixmonitor, list);
+	AST_LIST_UNLOCK(&monitors);
 
 	name = ast_strdupa(mixmonitor->chan->name);
 
@@ -218,7 +226,7 @@
 
 		ast_channel_spy_trigger_wait(&spy);
 		
-		if (ast_check_hangup(mixmonitor->chan) || spy.status != CHANSPY_RUNNING) {
+		if (ast_check_hangup(mixmonitor->chan) || spy.status != CHANSPY_RUNNING || ast_test_flag(mixmonitor, FLAG_STOP)) {
 			ast_mutex_unlock(&spy.lock);
 			break;
 		}
@@ -244,6 +252,8 @@
 		ast_mutex_unlock(&spy.lock);
 	}
 	
+	stopmon(mixmonitor->chan, &spy);
+
 	if (mixmonitor->post_process) {
 		char *p;
 
@@ -255,8 +265,6 @@
 		pbx_substitute_variables_helper(mixmonitor->chan, mixmonitor->post_process, post_process, sizeof(post_process) - 1);
 	}
 
-	stopmon(mixmonitor->chan, &spy);
-
 	if (option_verbose > 1)
 		ast_verbose(VERBOSE_PREFIX_2 "End MixMonitor Recording %s\n", name);
 
@@ -273,6 +281,10 @@
 		ast_closestream(fs);
 
 out:
+	AST_LIST_LOCK(&monitors);
+	AST_LIST_REMOVE(&monitors, mixmonitor, list);
+	AST_LIST_UNLOCK(&monitors);
+
 	free(mixmonitor);
 
 	STANDARD_DECREMENT_USECOUNT;
@@ -403,6 +415,7 @@
 static int mixmonitor_cli(int fd, int argc, char **argv) 
 {
 	struct ast_channel *chan;
+	struct mixmonitor *mon;
 
 	if (argc < 3)
 		return RESULT_SHOWUSAGE;
@@ -414,8 +427,13 @@
 
 	if (!strcasecmp(argv[1], "start"))
 		mixmonitor_exec(chan, argv[3]);
-	else if (!strcasecmp(argv[1], "stop"))
-		ast_channel_spy_stop_by_type(chan, mixmonitor_spy_type);
+	else if (!strcasecmp(argv[1], "stop")) {
+		AST_LIST_TRAVERSE_SAFE_BEGIN(&monitors, mon, list) {
+			if (chan == mon->chan)
+				ast_set_flag(mon, FLAG_STOP);
+		}
+		AST_LIST_TRAVERSE_SAFE_END;
+	}
 
 	ast_mutex_unlock(&chan->lock);
 



More information about the svn-commits mailing list