[Asterisk-cvs] asterisk/apps app_record.c,1.36,1.37

kpfleming kpfleming
Wed Sep 14 21:19:23 CDT 2005


Update of /usr/cvsroot/asterisk/apps
In directory mongoose.digium.com:/tmp/cvs-serv7288/apps

Modified Files:
	app_record.c 
Log Message:
ensure that Record() will exit even if no audio is received from the channel (issue #4899)


Index: app_record.c
===================================================================
RCS file: /usr/cvsroot/asterisk/apps/app_record.c,v
retrieving revision 1.36
retrieving revision 1.37
diff -u -d -r1.36 -r1.37
--- app_record.c	14 Sep 2005 20:46:49 -0000	1.36
+++ app_record.c	15 Sep 2005 01:17:51 -0000	1.37
@@ -89,9 +89,8 @@
 	int dspsilence = 0;
 	int silence = 0;		/* amount of silence to allow */
 	int gotsilence = 0;		/* did we timeout for silence? */
-	int maxduration = 0;		/* max duration of recording */
+	int maxduration = 0;		/* max duration of recording in milliseconds */
 	int gottimeout = 0;		/* did we timeout for maxduration exceeded? */
-	time_t timeout = 0;
 	int option_skip = 0;
 	int option_noanswer = 0;
 	int option_append = 0;
@@ -142,7 +141,8 @@
 	
 	if (maxstr) {
 		if ((sscanf(maxstr, "%d", &i) == 1) && (i > -1))
-			maxduration = i;
+			/* Convert duration to milliseconds */
+			maxduration = i * 1000;
 		else if (!ast_strlen_zero(maxstr))
 			ast_log(LOG_WARNING, "'%s' is not a valid maximum duration\n", maxstr);
 	}
@@ -227,19 +227,23 @@
 		flags = option_append ? O_CREAT|O_APPEND|O_WRONLY : O_CREAT|O_TRUNC|O_WRONLY;
 		s = ast_writefile( tmp, ext, NULL, flags , 0, 0644);
 		
-		
 		if (s) {
+			int waitres;
+
 			/* Request a video update */
 			ast_indicate(chan, AST_CONTROL_VIDUPDATE);
 
-			if (maxduration > 0)
-				timeout = time(NULL) + (time_t)maxduration;
+			if (maxduration <= 0)
+				maxduration = -1;
 			
-			while (ast_waitfor(chan, -1) > -1) {
-				if (maxduration > 0 && time(NULL) > timeout) {
-					gottimeout = 1;
-					break;
-				}
+			while ((waitres = ast_waitfor(chan, maxduration)) > -1) {
+				if (maxduration > 0) {
+					if (waitres == 0) {
+						gottimeout = 1;
+						break;
+					}
+					maxduration = waitres;
+  				}
 				
 				f = ast_read(chan);
 				if (!f) {




More information about the svn-commits mailing list