[asterisk-commits] rmudgett: branch 1.6.2 r224264 - in /branches/1.6.2: ./ channels/chan_dahdi.c

SVN commits to the Asterisk project asterisk-commits at lists.digium.com
Fri Oct 16 15:58:24 CDT 2009


Author: rmudgett
Date: Fri Oct 16 15:58:20 2009
New Revision: 224264

URL: http://svnview.digium.com/svn/asterisk?view=rev&rev=224264
Log:
Merged revisions 224261 via svnmerge from 
https://origsvn.digium.com/svn/asterisk/trunk

................
  r224261 | rmudgett | 2009-10-16 15:40:57 -0500 (Fri, 16 Oct 2009) | 25 lines
  
  Merged revisions 224260 via svnmerge from 
  https://origsvn.digium.com/svn/asterisk/branches/1.4
  
  ........
    r224260 | rmudgett | 2009-10-16 15:25:23 -0500 (Fri, 16 Oct 2009) | 18 lines
    
    Never released PRI channels when using Busy() or Congestion() dialplan apps.
    
    When the Busy() or Congestion() application is used towards ISDN (an ISDN
    progress is sent), the responding ISDN Disconnect or Release may contain
    the ISDN cause user busy or one of the congestion causes.  In chan_dahdi.c
    these causes will only set the needbusy or needcongestion flags and not
    activate the softhangup procedure.  Unfortunately only the latter can
    interrupt the endless wait loop of Busy()/Congestion().
    
    Result: PRI channels staying in state busy for the rest of asterisk life
    or until the other end times out and forces the call to clear.
    
    (in issue 0014292)
    Reported by: tomaso
    Patches:
          disc_rel_userbusy.patch uploaded by tomaso (license 564)
          (This patch is unrelated to the issue.)
  ........
................

Modified:
    branches/1.6.2/   (props changed)
    branches/1.6.2/channels/chan_dahdi.c

Propchange: branches/1.6.2/
------------------------------------------------------------------------------
Binary property 'trunk-merged' - no diff available.

Modified: branches/1.6.2/channels/chan_dahdi.c
URL: http://svnview.digium.com/svn/asterisk/branches/1.6.2/channels/chan_dahdi.c?view=diff&rev=224264&r1=224263&r2=224264
==============================================================================
--- branches/1.6.2/channels/chan_dahdi.c (original)
+++ branches/1.6.2/channels/chan_dahdi.c Fri Oct 16 15:58:20 2009
@@ -13223,9 +13223,12 @@
 							else if (pri->pvts[chanpos]->owner) {
 								/* Queue a BUSY instead of a hangup if our cause is appropriate */
 								pri->pvts[chanpos]->owner->hangupcause = e->hangup.cause;
-								if (pri->pvts[chanpos]->owner->_state == AST_STATE_UP)
+								switch (pri->pvts[chanpos]->owner->_state) {
+								case AST_STATE_BUSY:
+								case AST_STATE_UP:
 									pri->pvts[chanpos]->owner->_softhangup |= AST_SOFTHANGUP_DEV;
-								else {
+									break;
+								default:
 									switch (e->hangup.cause) {
 									case PRI_CAUSE_USER_BUSY:
 										pri->pvts[chanpos]->subs[SUB_REAL].needbusy =1;
@@ -13241,6 +13244,7 @@
 									default:
 										pri->pvts[chanpos]->owner->_softhangup |= AST_SOFTHANGUP_DEV;
 									}
+									break;
 								}
 							}
 							ast_verb(3, "Channel %d/%d, span %d got hangup, cause %d\n",
@@ -13291,9 +13295,12 @@
 							pri_hangup_all(pri->pvts[chanpos]->realcall, pri);
 						else if (pri->pvts[chanpos]->owner) {
 							pri->pvts[chanpos]->owner->hangupcause = e->hangup.cause;
-							if (pri->pvts[chanpos]->owner->_state == AST_STATE_UP)
+							switch (pri->pvts[chanpos]->owner->_state) {
+							case AST_STATE_BUSY:
+							case AST_STATE_UP:
 								pri->pvts[chanpos]->owner->_softhangup |= AST_SOFTHANGUP_DEV;
-							else {
+								break;
+							default:
 								switch (e->hangup.cause) {
 								case PRI_CAUSE_USER_BUSY:
 									pri->pvts[chanpos]->subs[SUB_REAL].needbusy =1;
@@ -13310,6 +13317,7 @@
 									pri->pvts[chanpos]->owner->_softhangup |= AST_SOFTHANGUP_DEV;
 									break;
 								}
+								break;
 							}
 							ast_verb(3, "Channel %d/%d, span %d got hangup request, cause %d\n", PRI_SPAN(e->hangup.channel), PRI_CHANNEL(e->hangup.channel), pri->span, e->hangup.cause);
 							if (e->hangup.aoc_units > -1)




More information about the asterisk-commits mailing list