if (config->timelimit) {
time_left_ms = config->timelimit - ast_tvdiff_ms(now, config->start_time);
- if (time_left_ms < to)
+ if (time_left_ms < 0) {
+ time_left_ms = 0;
+ }
+
+ if (time_left_ms < to) {
to = time_left_ms;
+ }
if (time_left_ms <= 0) {
if (caller_warning && config->end_sound)
if (callee_warning && config->end_sound)
bridge_playfile(c1, c0, config->end_sound, 0);
*fo = NULL;
- res = 0;
+ res = AST_BRIDGE_COMPLETE;
ast_test_suite_event_notify("BRIDGE_TIMELIMIT", "Channel1: %s\r\nChannel2: %s", ast_channel_name(c0), ast_channel_name(c1));
break;
}
if (ast_test_flag(ast_channel_flags(c0), AST_FLAG_ZOMBIE) || ast_check_hangup_locked(c0) ||
ast_test_flag(ast_channel_flags(c1), AST_FLAG_ZOMBIE) || ast_check_hangup_locked(c1)) {
*fo = NULL;
- res = 0;
+ res = AST_BRIDGE_COMPLETE;
ast_debug(1, "Bridge stops because we're zombie or need a soft hangup: c0=%s, c1=%s, flags: %s,%s,%s,%s\n",
ast_channel_name(c0), ast_channel_name(c1),
ast_test_flag(ast_channel_flags(c0), AST_FLAG_ZOMBIE) ? "Yes" : "No",
if (ast_channel_tech(c0)->bridge &&
/* if < 1 ms remains use generic bridging for accurate timing */
- (!config->timelimit || to > 1000 || to == 0) &&
+ (!config->timelimit || to > 1000 || to == -1) &&
(ast_channel_tech(c0)->bridge == ast_channel_tech(c1)->bridge) &&
!ast_channel_monitor(c0) && !ast_channel_monitor(c1) &&
!ast_channel_audiohooks(c0) && !ast_channel_audiohooks(c1) &&