]> git.ipfire.org Git - thirdparty/asterisk.git/commitdiff
Make sure we destroy scheduled items and not use them ever again after destruction...
authorOlle Johansson <oej@edvina.net>
Mon, 20 Nov 2006 11:29:19 +0000 (11:29 +0000)
committerOlle Johansson <oej@edvina.net>
Mon, 20 Nov 2006 11:29:19 +0000 (11:29 +0000)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.4@47843 65c4cc65-6c06-0410-ace0-fbb531ad65f3

channels/chan_sip.c

index a81fbb7ab524379d90f20e7cbc82f90b866d0e5f..89e52342a1802f77639882879539576bd4a9ea19 100644 (file)
@@ -2038,6 +2038,7 @@ static void __sip_ack(struct sip_pvt *p, int seqno, int resp, int sipmethod)
                                if (sipdebug && option_debug > 3)
                                        ast_log(LOG_DEBUG, "** SIP TIMER: Cancelling retransmit of packet (reply received) Retransid #%d\n", cur->retransid);
                                ast_sched_del(sched, cur->retransid);
+                               cur->retransid = -1;
                        }
                        free(cur);
                        break;
@@ -2080,8 +2081,8 @@ static int __sip_semi_ack(struct sip_pvt *p, int seqno, int resp, int sipmethod)
                                if (option_debug > 3 && sipdebug)
                                        ast_log(LOG_DEBUG, "*** SIP TIMER: Cancelling retransmission #%d - %s (got response)\n", cur->retransid, sip_methods[sipmethod].text);
                                ast_sched_del(sched, cur->retransid);
+                               cur->retransid = -1;
                        }
-                       cur->retransid = -1;
                        res = 0;
                        break;
                }
@@ -2330,6 +2331,7 @@ static void sip_destroy_peer(struct sip_peer *peer)
        }
        if (peer->expire > -1)
                ast_sched_del(sched, peer->expire);
+
        if (peer->pokeexpire > -1)
                ast_sched_del(sched, peer->pokeexpire);
        register_peer_exten(peer, FALSE);
@@ -7717,8 +7719,10 @@ static enum parse_register_result parse_register_contact(struct sip_pvt *pvt, st
        else
                peer->username[0] = '\0';
 
-       if (peer->expire > -1)
+       if (peer->expire > -1) {
                ast_sched_del(sched, peer->expire);
+               peer->expire = -1;
+       }
        if (expiry > max_expiry)
                expiry = max_expiry;
        if (expiry < min_expiry)
@@ -11783,6 +11787,7 @@ static int handle_response_register(struct sip_pvt *p, int resp, char *rest, str
                if (global_regattempts_max)
                        p->registry->regattempts = global_regattempts_max+1;
                ast_sched_del(sched, r->timeout);
+               r->timeout = -1;
                ast_set_flag(&p->flags[0], SIP_NEEDDESTROY);    
                break;
        case 404:       /* Not found */
@@ -11792,6 +11797,7 @@ static int handle_response_register(struct sip_pvt *p, int resp, char *rest, str
                ast_set_flag(&p->flags[0], SIP_NEEDDESTROY);    
                r->call = NULL;
                ast_sched_del(sched, r->timeout);
+               r->timeout = -1;
                break;
        case 407:       /* Proxy auth */
                if ((p->authtries == MAX_AUTHTRIES) || do_register_auth(p, req, "Proxy-Authenticate", "Proxy-Authorization")) {
@@ -11806,6 +11812,7 @@ static int handle_response_register(struct sip_pvt *p, int resp, char *rest, str
                ast_set_flag(&p->flags[0], SIP_NEEDDESTROY);    
                r->call = NULL;
                ast_sched_del(sched, r->timeout);
+               r->timeout = -1;
                break;
        case 200:       /* 200 OK */
                if (!r) {