]> git.ipfire.org Git - thirdparty/asterisk.git/commitdiff
This is the fix for bug 8386, wherein the time-limit args to dial didn't work correctly
authorSteve Murphy <murf@digium.com>
Wed, 22 Nov 2006 02:19:09 +0000 (02:19 +0000)
committerSteve Murphy <murf@digium.com>
Wed, 22 Nov 2006 02:19:09 +0000 (02:19 +0000)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@47910 65c4cc65-6c06-0410-ace0-fbb531ad65f3

channel.c

index d07656555fdac4e58d36eadb46b32e6ce42bc0bd..c18022c8e9369c49337337c561586af5ee155c26 100644 (file)
--- 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;