Index: include/asterisk/channel.h =================================================================== --- include/asterisk/channel.h (revision 196926) +++ include/asterisk/channel.h (working copy) @@ -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; Index: main/channel.c =================================================================== --- main/channel.c (revision 196926) +++ main/channel.c (working copy) @@ -3964,7 +3964,10 @@ /* nexteventts is not set when the bridge is not scheduled to * break, so 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 { + config->partialfeature_timer.tv_sec = 0; + config->partialfeature_timer.tv_usec = 0; } for (;;) { @@ -3994,8 +3997,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;