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

SVN commits to the Asterisk project asterisk-commits at lists.digium.com
Tue May 3 14:22:37 CDT 2011


Author: rmudgett
Date: Tue May  3 14:22:29 2011
New Revision: 316240

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

........
  r316224 | rmudgett | 2011-05-03 14:18:30 -0500 (Tue, 03 May 2011) | 16 lines
  
  The dahdi_hangup() call does not clean up the channel fully.
  
  After dahdi_hangup() has supposedly hungup an ISDN channel there is still
  traffic on the S0-bus because the channel was not cleaned up fully.
  
  Shuffled the hangup code to include some missing cleanup.  Also fixed some
  code formatting in the area.  I think the primary missing clean up code
  was the call to tone_zone_play_tone() to turn off any active tones on the
  channel.
  
  (closes issue #19188)
  Reported by: jg1234
  Patches:
        issue19188_v1.8.patch uploaded by rmudgett (license 664)
  Tested by: jg1234
........

Modified:
    trunk/   (props changed)
    trunk/channels/chan_dahdi.c
    trunk/channels/sig_analog.c
    trunk/channels/sig_pri.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=316240&r1=316239&r2=316240
==============================================================================
--- trunk/channels/chan_dahdi.c (original)
+++ trunk/channels/chan_dahdi.c Tue May  3 14:22:29 2011
@@ -6135,10 +6135,11 @@
 		p->cid_subaddr[0] = '\0';
 	}
 
-#ifdef HAVE_PRI
+#if defined(HAVE_PRI)
 	if (dahdi_sig_pri_lib_handles(p->sig)) {
 		x = 1;
-		ast_channel_setoption(ast,AST_OPTION_AUDIO_MODE,&x,sizeof(char),0);
+		ast_channel_setoption(ast, AST_OPTION_AUDIO_MODE, &x, sizeof(char), 0);
+
 		dahdi_confmute(p, 0);
 		p->muting = 0;
 		restore_gains(p);
@@ -6147,17 +6148,12 @@
 			p->dsp = NULL;
 		}
 		p->ignoredtmf = 0;
-		revert_fax_buffers(p, ast);
-		dahdi_setlinear(p->subs[SUB_REAL].dfd, 0);
-		p->law = p->law_default;
-		law = p->law_default;
-		res = ioctl(p->subs[SUB_REAL].dfd, DAHDI_SETLAW, &law);
-		dahdi_disable_ec(p);
-		update_conf(p);
-		reset_conf(p);
-		sig_pri_hangup(p->sig_pvt, ast);
+
+		/* Real channel, do some fixup */
 		p->subs[SUB_REAL].owner = NULL;
 		p->subs[SUB_REAL].needbusy = 0;
+		dahdi_setlinear(p->subs[SUB_REAL].dfd, 0);
+
 		p->owner = NULL;
 		p->cid_tag[0] = '\0';
 		p->ringt = 0;/* Probably not used in this mode.  Reset anyway. */
@@ -6167,14 +6163,45 @@
 		p->digital = 0;
 		p->faxhandled = 0;
 		p->pulsedial = 0;/* Probably not used in this mode. Reset anyway. */
+
+		revert_fax_buffers(p, ast);
+
+		p->law = p->law_default;
+		law = p->law_default;
+		res = ioctl(p->subs[SUB_REAL].dfd, DAHDI_SETLAW, &law);
+		if (res < 0) {
+			ast_log(LOG_WARNING, "Unable to set law on channel %d to default: %s\n",
+				p->channel, strerror(errno));
+		}
+
+		sig_pri_hangup(p->sig_pvt, ast);
+
+		tone_zone_play_tone(p->subs[SUB_REAL].dfd, -1);
+		dahdi_disable_ec(p);
+
+		x = 0;
+		ast_channel_setoption(ast, AST_OPTION_TDD, &x, sizeof(char), 0);
+		p->didtdd = 0;/* Probably not used in this mode. Reset anyway. */
+
+		p->rdnis[0] = '\0';
+		update_conf(p);
+		reset_conf(p);
+
+		/* Restore data mode */
+		x = 0;
+		ast_channel_setoption(ast, AST_OPTION_AUDIO_MODE, &x, sizeof(char), 0);
+
+		if (num_restart_pending == 0) {
+			restart_monitor();
+		}
 		goto hangup_out;
 	}
-#endif
+#endif	/* defined(HAVE_PRI) */
 
 #if defined(HAVE_SS7)
 	if (p->sig == SIG_SS7) {
 		x = 1;
-		ast_channel_setoption(ast,AST_OPTION_AUDIO_MODE,&x,sizeof(char),0);
+		ast_channel_setoption(ast, AST_OPTION_AUDIO_MODE, &x, sizeof(char), 0);
 
 		dahdi_confmute(p, 0);
 		p->muting = 0;
@@ -6188,7 +6215,6 @@
 		/* Real channel, do some fixup */
 		p->subs[SUB_REAL].owner = NULL;
 		p->subs[SUB_REAL].needbusy = 0;
-		p->polarity = POLARITY_IDLE;
 		dahdi_setlinear(p->subs[SUB_REAL].dfd, 0);
 
 		p->owner = NULL;
@@ -6205,28 +6231,30 @@
 		p->law = p->law_default;
 		law = p->law_default;
 		res = ioctl(p->subs[SUB_REAL].dfd, DAHDI_SETLAW, &law);
-		if (res < 0)
-			ast_log(LOG_WARNING, "Unable to set law on channel %d to default: %s\n", p->channel, strerror(errno));
+		if (res < 0) {
+			ast_log(LOG_WARNING, "Unable to set law on channel %d to default: %s\n",
+				p->channel, strerror(errno));
+		}
 
 		sig_ss7_hangup(p->sig_pvt, ast);
 
 		tone_zone_play_tone(p->subs[SUB_REAL].dfd, -1);
 		dahdi_disable_ec(p);
+
 		x = 0;
-		ast_channel_setoption(ast,AST_OPTION_TONE_VERIFY,&x,sizeof(char),0);
-		ast_channel_setoption(ast,AST_OPTION_TDD,&x,sizeof(char),0);
+		ast_channel_setoption(ast, AST_OPTION_TDD, &x, sizeof(char), 0);
 		p->didtdd = 0;/* Probably not used in this mode. Reset anyway. */
+
 		update_conf(p);
 		reset_conf(p);
 
 		/* Restore data mode */
 		x = 0;
-		ast_channel_setoption(ast,AST_OPTION_AUDIO_MODE,&x,sizeof(char),0);
-
-		if (num_restart_pending == 0)
+		ast_channel_setoption(ast, AST_OPTION_AUDIO_MODE, &x, sizeof(char), 0);
+
+		if (num_restart_pending == 0) {
 			restart_monitor();
-
-		ast->tech_pvt = NULL;
+		}
 		goto hangup_out;
 	}
 #endif	/* defined(HAVE_SS7) */
@@ -6440,6 +6468,7 @@
 			break;
 		default:
 			tone_zone_play_tone(p->subs[SUB_REAL].dfd, -1);
+			break;
 		}
 		if (p->sig)
 			dahdi_disable_ec(p);
@@ -6473,8 +6502,8 @@
 	p->cidcwexpire = 0;
 	p->cid_suppress_expire = 0;
 	p->oprmode = 0;
+hangup_out:
 	ast->tech_pvt = NULL;
-hangup_out:
 	ast_free(p->cidspill);
 	p->cidspill = NULL;
 

Modified: trunk/channels/sig_analog.c
URL: http://svnview.digium.com/svn/asterisk/trunk/channels/sig_analog.c?view=diff&rev=316240&r1=316239&r2=316240
==============================================================================
--- trunk/channels/sig_analog.c (original)
+++ trunk/channels/sig_analog.c Tue May  3 14:22:29 2011
@@ -1470,7 +1470,6 @@
 	}
 
 	analog_stop_callwait(p);
-	ast->tech_pvt = NULL;
 
 	ast_verb(3, "Hanging up on '%s'\n", ast->name);
 

Modified: trunk/channels/sig_pri.c
URL: http://svnview.digium.com/svn/asterisk/trunk/channels/sig_pri.c?view=diff&rev=316240&r1=316239&r2=316240
==============================================================================
--- trunk/channels/sig_pri.c (original)
+++ trunk/channels/sig_pri.c Tue May  3 14:22:29 2011
@@ -7179,8 +7179,6 @@
 
 	sig_pri_span_devstate_changed(p->pri);
 	pri_rel(p->pri);
-
-	ast->tech_pvt = NULL;
 	return 0;
 }
 




More information about the asterisk-commits mailing list