diff --git a/channels/chan_iax2.c b/channels/chan_iax2.c index 1aa9085311a394117e534bc173f13fb79d6c6eea..6c852cf018600bef87b284618f2734162d6db8c7 100755 --- a/channels/chan_iax2.c +++ b/channels/chan_iax2.c @@ -2566,8 +2566,12 @@ static struct iax2_peer *realtime_peer(const char *peername) peerl.peers = peer; ast_mutex_unlock(&peerl.lock); ast_copy_flags(peer, &globalflags, IAX_RTAUTOCLEAR|IAX_RTCACHEFRIENDS); - if (ast_test_flag(peer, IAX_RTAUTOCLEAR)) + if (ast_test_flag(peer, IAX_RTAUTOCLEAR)) { + if (peer->expire > -1) { + ast_sched_del(sched, peer->expire); + } peer->expire = ast_sched_add(sched, (global_rtautoclear) * 1000, expire_registry, (void *)peer); + } } else { ast_set_flag(peer, IAX_TEMPONLY); } diff --git a/channels/chan_sip.c b/channels/chan_sip.c index 5704a10f1ffc044f417aac5485fcc6e1e95c931a..236b5bad5b43d34bfd541236d75c529a87e303f5 100755 --- a/channels/chan_sip.c +++ b/channels/chan_sip.c @@ -1292,6 +1292,9 @@ static struct sip_peer *realtime_peer(const char *peername, struct sockaddr_in * if(ast_test_flag((&global_flags_page2), SIP_PAGE2_RTCACHEFRIENDS)) { ast_copy_flags((&peer->flags_page2),(&global_flags_page2), SIP_PAGE2_RTAUTOCLEAR|SIP_PAGE2_RTCACHEFRIENDS); if(ast_test_flag((&global_flags_page2), SIP_PAGE2_RTAUTOCLEAR)) { + if (peer->expire > -1) { + ast_sched_del(sched, peer->expire); + } peer->expire = ast_sched_add(sched, (global_rtautoclear) * 1000, expire_register, (void *)peer); } ASTOBJ_CONTAINER_LINK(&peerl,peer);