Index: channels/chan_sip.c =================================================================== --- channels/chan_sip.c (revision 78241) +++ channels/chan_sip.c (working copy) @@ -2013,6 +2013,8 @@ siptimer_a = pkt->timer_t1 * 2; /* Schedule retransmission */ + if (pkt->retransid > -1) + ast_sched_del(sched, pkt->retransid); pkt->retransid = ast_sched_add_variable(sched, siptimer_a, retrans_pkt, pkt, 1); if (option_debug > 3 && sipdebug) ast_log(LOG_DEBUG, "*** SIP TIMER: Initalizing retransmit timer on packet: Id #%d\n", pkt->retransid); @@ -2954,6 +2956,8 @@ p->invitestate = INV_CALLING; /* Initialize auto-congest time */ + if (p->initid > -1) + ast_sched_del(sched, p->initid); p->initid = ast_sched_add(sched, p->maxtime ? (p->maxtime * 4) : SIP_TRANS_TIMEOUT, auto_congest, p); } } @@ -12270,7 +12274,9 @@ r->refresh= (int) expires_ms / 1000; /* Schedule re-registration before we expire */ - r->expire=ast_sched_add(sched, expires_ms, sip_reregister, r); + if (r->expire > -1) + ast_sched_del(sched, r->expire); + r->expire = ast_sched_add(sched, expires_ms, sip_reregister, r); ASTOBJ_UNREF(r, sip_registry_destroy); } return 1; @@ -15424,6 +15430,8 @@ peer->lastms = -1; ast_device_state_changed("SIP/%s", peer->name); /* Try again quickly */ + if (peer->pokeexpire > -1) + ast_sched_del(sched, peer->pokeexpire); peer->pokeexpire = ast_sched_add(sched, DEFAULT_FREQ_NOTOK, sip_poke_peer_s, peer); return 0; } @@ -15487,8 +15495,11 @@ gettimeofday(&peer->ps, NULL); if (xmitres == XMIT_ERROR) sip_poke_noanswer(peer); /* Immediately unreachable, network problems */ - else + else { + if (peer->pokeexpire > -1) + ast_sched_del(sched, peer->pokeexpire); peer->pokeexpire = ast_sched_add(sched, DEFAULT_MAXMS * 2, sip_poke_noanswer, peer); + } return 0; }