aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authormurf <murf@f38db490-d61c-443f-a65b-d21fe96a405b>2006-11-22 02:19:09 +0000
committermurf <murf@f38db490-d61c-443f-a65b-d21fe96a405b>2006-11-22 02:19:09 +0000
commit16f742943a25f1bde5304cc159e664e780440c63 (patch)
tree7b199de108f5398a5aea671c472865b8fd941ea3
parentcff70272fffbf19579aa8a12312fa862e09d8a64 (diff)
This is the fix for bug 8386, wherein the time-limit args to dial didn't work correctly
git-svn-id: http://svn.digium.com/svn/asterisk/branches/1.2@47910 f38db490-d61c-443f-a65b-d21fe96a405b
-rw-r--r--channel.c19
1 files changed, 12 insertions, 7 deletions
diff --git a/channel.c b/channel.c
index d07656555..c18022c8e 100644
--- a/channel.c
+++ b/channel.c
@@ -355,8 +355,11 @@ void ast_channel_unregister(const struct ast_channel_tech *tech)
{
struct chanlist *chan, *last=NULL;
- if (option_debug)
+ if (option_debug && tech && tech->type )
ast_log(LOG_DEBUG, "Unregistering channel type '%s'\n", tech->type);
+ else if (option_debug)
+ ast_log(LOG_DEBUG, "Unregistering channel, tech is NULL!!!\n");
+
ast_mutex_lock(&chlock);
@@ -3502,10 +3505,11 @@ enum ast_bridge_result ast_channel_bridge(struct ast_channel *c0, struct ast_cha
if (!ast_tvzero(nexteventts)) {
now = ast_tvnow();
to = ast_tvdiff_ms(nexteventts, now);
- if (to <= 0) {
+ if (to <= 0 && !config->timelimit) {
res = AST_BRIDGE_COMPLETE;
break;
- }
+ }
+
}
if (config->timelimit) {
@@ -3525,7 +3529,7 @@ enum ast_bridge_result ast_channel_bridge(struct ast_channel *c0, struct ast_cha
break;
}
- if (!to) {
+ if (to <= 0) {
if (time_left_ms >= 5000) {
/* force the time left to round up if appropriate */
if (caller_warning && config->warning_sound && config->play_warning)
@@ -3537,8 +3541,11 @@ enum ast_bridge_result ast_channel_bridge(struct ast_channel *c0, struct ast_cha
}
if (config->warning_freq) {
nexteventts = ast_tvadd(nexteventts, ast_samp2tv(config->warning_freq, 1000));
- } else
+ }
+
+ if ( (!config->warning_freq) || ( config->timelimit - ast_tvdiff_ms(nexteventts, config->start_time) < 0)) {
nexteventts = ast_tvadd(config->start_time, ast_samp2tv(config->timelimit, 1000));
+ }
}
}
@@ -3636,8 +3643,6 @@ enum ast_bridge_result ast_channel_bridge(struct ast_channel *c0, struct ast_cha
o1nativeformats = c1->nativeformats;
}
res = ast_generic_bridge(c0, c1, config, fo, rc, nexteventts);
- if (res != AST_BRIDGE_RETRY)
- break;
}
c0->_bridge = NULL;