[asterisk-commits] tilghman: trunk r149062 - in /trunk: ./ apps/app_waitforsilence.c

SVN commits to the Asterisk project asterisk-commits at lists.digium.com
Tue Oct 14 15:16:49 CDT 2008


Author: tilghman
Date: Tue Oct 14 15:16:48 2008
New Revision: 149062

URL: http://svn.digium.com/view/asterisk?view=rev&rev=149062
Log:
Merged revisions 149061 via svnmerge from 
https://origsvn.digium.com/svn/asterisk/branches/1.4

........
  r149061 | tilghman | 2008-10-14 15:09:06 -0500 (Tue, 14 Oct 2008) | 6 lines
  
  Check correct values in the return of ast_waitfor(); also, get rid of a
  possible memory leak.
  (closes issue #13658)
   Reported by: explidous
   Patch by: me
........

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

Propchange: trunk/
------------------------------------------------------------------------------
Binary property 'branch-1.4-merged' - no diff available.

Modified: trunk/apps/app_waitforsilence.c
URL: http://svn.digium.com/view/asterisk/trunk/apps/app_waitforsilence.c?view=diff&rev=149062&r1=149061&r2=149062
==============================================================================
--- trunk/apps/app_waitforsilence.c (original)
+++ trunk/apps/app_waitforsilence.c Tue Oct 14 15:16:48 2008
@@ -81,7 +81,7 @@
 "Wait for Noise: The same as Wait for Silance but waits for noise that is above the threshold specified\n";
 
 static int do_waiting(struct ast_channel *chan, int timereqd, time_t waitstart, int timeout, int wait_for_silence) {
-	struct ast_frame *f;
+	struct ast_frame *f = NULL;
 	int dsptime = 0;
 	int rfmt = 0;
 	int res = 0;
@@ -93,57 +93,50 @@
 				wait_for_silence ? ast_dsp_silence : ast_dsp_noise;
 
 	rfmt = chan->readformat; /* Set to linear mode */
-	res = ast_set_read_format(chan, AST_FORMAT_SLINEAR);
-	if (res < 0) {
+	if ((res = ast_set_read_format(chan, AST_FORMAT_SLINEAR)) < 0) {
 		ast_log(LOG_WARNING, "Unable to set channel to linear mode, giving up\n");
 		return -1;
 	}
 
-	sildet = ast_dsp_new(); /* Create the silence detector */
-	if (!sildet) {
+	/* Create the silence detector */
+	if (!(sildet = ast_dsp_new())) {
 		ast_log(LOG_WARNING, "Unable to create silence detector :(\n");
 		return -1;
 	}
 	ast_dsp_set_threshold(sildet, ast_dsp_get_threshold_from_settings(THRESHOLD_SILENCE));
 
 	/* Await silence... */
-	f = NULL;
-	for(;;) {
+	for (;;) {
 		/* Start with no silence received */
 		dsptime = 0;
 
 		res = ast_waitfor(chan, timereqd);
 
 		/* Must have gotten a hangup; let's exit */
-		if (res <= 0) {
-			f = NULL;
+		if (res < 0) {
+			pbx_builtin_setvar_helper(chan, "WAITSTATUS", "HANGUP");
 			break;
 		}
 		
 		/* We waited and got no frame; sounds like digital silence or a muted digital channel */
-		if (!res) {
+		if (res == 0) {
 			dsptime = timereqd;
 		} else {
 			/* Looks like we did get a frame, so let's check it out */
-			f = ast_read(chan);
-			if (!f)
+			if (!(f = ast_read(chan))) {
+				pbx_builtin_setvar_helper(chan, "WAITSTATUS", "HANGUP");
 				break;
-			if (f && f->frametype == AST_FRAME_VOICE) {
+			}
+			if (f->frametype == AST_FRAME_VOICE) {
 				ast_dsp_func(sildet, f, &dsptime);
-				ast_frfree(f);
 			}
-		}
-
-		if (wait_for_silence)
-			ast_verb(6, "Got %dms silence < %dms required\n", dsptime, timereqd);
-		else
-			ast_verb(6, "Got %dms noise < %dms required\n", dsptime, timereqd);
+			ast_frfree(f);
+		}
+
+		ast_verb(6, "Got %dms %s < %dms required\n", dsptime, wait_for_silence ? "silence" : "noise", timereqd);
 
 		if (dsptime >= timereqd) {
-			if (wait_for_silence)
-				ast_verb(3, "Exiting with %dms silence >= %dms required\n", dsptime, timereqd);
-			else
-				ast_verb(3, "Exiting with %dms noise >= %dms required\n", dsptime, timereqd);
+			ast_verb(3, "Exiting with %dms %s >= %dms required\n", dsptime, wait_for_silence ? "silence" : "noise", timereqd);
 			/* Ended happily with silence */
 			res = 1;
 			pbx_builtin_setvar_helper(chan, "WAITSTATUS", wait_for_silence ? "SILENCE" : "NOISE");




More information about the asterisk-commits mailing list