[asterisk-commits] rmudgett: trunk r313191 - in /trunk: ./ channels/

SVN commits to the Asterisk project asterisk-commits at lists.digium.com
Mon Apr 11 10:47:22 CDT 2011


Author: rmudgett
Date: Mon Apr 11 10:47:17 2011
New Revision: 313191

URL: http://svnview.digium.com/svn/asterisk?view=rev&rev=313191
Log:
Merged revisions 313190 via svnmerge from 
https://origsvn.digium.com/svn/asterisk/branches/1.8

................
  r313190 | rmudgett | 2011-04-11 10:40:30 -0500 (Mon, 11 Apr 2011) | 39 lines
  
  Merged revisions 313189 via svnmerge from 
  https://origsvn.digium.com/svn/asterisk/branches/1.6.2
  
  ................
    r313189 | rmudgett | 2011-04-11 10:32:53 -0500 (Mon, 11 Apr 2011) | 32 lines
    
    Merged revisions 313188 via svnmerge from 
    https://origsvn.digium.com/svn/asterisk/branches/1.4
    
    ........
      r313188 | rmudgett | 2011-04-11 10:27:52 -0500 (Mon, 11 Apr 2011) | 25 lines
      
      Stuck channel using FEATD_MF if caller hangs up at the right time.
      
      The cause was actually a caller hanging up just at the end of the Feature
      Group D DTMF tones that setup the call.  The reason for this is a "guard
      timer" that's implemented using ast_safe_sleep(100).  If the caller
      happens to hang up AFTER the final tone of the DTMF string but BEFORE the
      end of that ast_safe_sleep(), then ast_safe_sleep() will return non-zero.
      This causes the code to bounce to the end of ss_thread(), but it does NOT
      tear down the call properly.
      
      This should be a rare occurrence because the caller has to hang up at
      EXACTLY the right time.  Nonetheless, it was happening quite regularly on
      the reporter's system.  It's not easily reproducible, unless you purposely
      increase the guard-time to 2000 or more.  Once you do that, you can
      reproduce it every time by watching the DTMF debug and hanging up just as
      it ends.
      
      Simply add an ast_hangup() before goto quit.
      
      (closes issue #15671)
      Reported by: jcromes
      Patches:
            issue15671.patch uploaded by pabelanger (license 224)
      Tested by: jcromes
    ........
  ................
................

Modified:
    trunk/   (props changed)
    trunk/channels/chan_dahdi.c
    trunk/channels/sig_analog.c

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

Modified: trunk/channels/chan_dahdi.c
URL: http://svnview.digium.com/svn/asterisk/trunk/channels/chan_dahdi.c?view=diff&rev=313191&r1=313190&r2=313191
==============================================================================
--- trunk/channels/chan_dahdi.c (original)
+++ trunk/channels/chan_dahdi.c Mon Apr 11 10:47:17 2011
@@ -9986,7 +9986,10 @@
 			/* some switches require a minimum guard time between
 			   the last FGD wink and something that answers
 			   immediately. This ensures it */
-			if (ast_safe_sleep(chan,100)) goto quit;
+			if (ast_safe_sleep(chan, 100)) {
+				ast_hangup(chan);
+				goto quit;
+			}
 		}
 		dahdi_enable_ec(p);
 		if (NEED_MFDETECT(p)) {

Modified: trunk/channels/sig_analog.c
URL: http://svnview.digium.com/svn/asterisk/trunk/channels/sig_analog.c?view=diff&rev=313191&r1=313190&r2=313191
==============================================================================
--- trunk/channels/sig_analog.c (original)
+++ trunk/channels/sig_analog.c Mon Apr 11 10:47:17 2011
@@ -2010,10 +2010,13 @@
 		}
 		if ((p->sig == ANALOG_SIG_FEATDMF) || (p->sig == ANALOG_SIG_FEATDMF_TA)) {
 			analog_wink(p, idx);
-			/* some switches require a minimum guard time between
-			the last FGD wink and something that answers
-			immediately. This ensures it */
-			if (ast_safe_sleep(chan,100)) {
+			/*
+			 * Some switches require a minimum guard time between the last
+			 * FGD wink and something that answers immediately.  This
+			 * ensures it.
+			 */
+			if (ast_safe_sleep(chan, 100)) {
+				ast_hangup(chan);
 				goto quit;
 			}
 		}




More information about the asterisk-commits mailing list