[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