[asterisk-commits] jpeeler: branch 1.4 r197124 - in /branches/1.4: include/asterisk/ main/

SVN commits to the Asterisk project asterisk-commits at lists.digium.com
Wed May 27 11:49:49 CDT 2009


Author: jpeeler
Date: Wed May 27 11:49:38 2009
New Revision: 197124

URL: http://svn.asterisk.org/svn-view/asterisk?view=rev&rev=197124
Log:
Fix broken attended transfers

The bridge was terminating immediately after the attended transfer was 
completed. The problem was because upon reentering ast_channel_bridge
nexteventts was checked to see if it was set and if so could possibly
return AST_BRIDGE_COMPLETE.

(closes issue #15183)
Reported by: andrebarbosa
Tested by: andrebarbosa, tootai, loloski


Modified:
    branches/1.4/include/asterisk/channel.h
    branches/1.4/main/channel.c

Modified: branches/1.4/include/asterisk/channel.h
URL: http://svn.asterisk.org/svn-view/asterisk/branches/1.4/include/asterisk/channel.h?view=diff&rev=197124&r1=197123&r2=197124
==============================================================================
--- branches/1.4/include/asterisk/channel.h (original)
+++ branches/1.4/include/asterisk/channel.h Wed May 27 11:49:38 2009
@@ -534,6 +534,7 @@
 	struct ast_flags features_callee;
 	struct timeval start_time;
 	struct timeval nexteventts;
+	struct timeval partialfeature_timer;
 	long feature_timer;
 	long timelimit;
 	long play_warning;

Modified: branches/1.4/main/channel.c
URL: http://svn.asterisk.org/svn-view/asterisk/branches/1.4/main/channel.c?view=diff&rev=197124&r1=197123&r2=197124
==============================================================================
--- branches/1.4/main/channel.c (original)
+++ branches/1.4/main/channel.c Wed May 27 11:49:38 2009
@@ -3961,10 +3961,11 @@
 		ast_jb_empty_and_reset(c0, c1);
 
 	if (config->feature_timer > 0 && ast_tvzero(config->nexteventts)) {
-		/* nexteventts is not set when the bridge is not scheduled to
- 		 * break, so calculate when the bridge should possibly break
+		/* calculate when the bridge should possibly break
  		 * if a partial feature match timed out */
-		config->nexteventts = ast_tvadd(ast_tvnow(), ast_samp2tv(config->feature_timer, 1000));
+		config->partialfeature_timer = ast_tvadd(ast_tvnow(), ast_samp2tv(config->feature_timer, 1000));
+	} else {
+		memset(&config->partialfeature_timer, 0, sizeof(config->partialfeature_timer));
 	}
 
 	for (;;) {
@@ -3994,8 +3995,8 @@
  			 * to not break, leave the channel bridge when the feature timer
 			 * time has elapsed so the DTMF will be sent to the other side. 
  			 */
-			if (!ast_tvzero(config->nexteventts)) {
-				int diff = ast_tvdiff_ms(config->nexteventts, ast_tvnow());
+			if (!ast_tvzero(config->partialfeature_timer)) {
+				int diff = ast_tvdiff_ms(config->partialfeature_timer, ast_tvnow());
 				if (diff <= 0) {
 					res = AST_BRIDGE_RETRY;
 					break;




More information about the asterisk-commits mailing list