From 6d866978673b5a43bd4fe8a915f11e3ab833dbba Mon Sep 17 00:00:00 2001 From: Olle Johansson <oej@edvina.net> Date: Tue, 27 Jun 2006 18:00:09 +0000 Subject: [PATCH] issue #7033 - Don't burst pokes to peers at load or reload. Open for a cool algorithm to space them out... git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@36178 65c4cc65-6c06-0410-ace0-fbb531ad65f3 --- channels/chan_sip.c | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/channels/chan_sip.c b/channels/chan_sip.c index 1856c9af2a..07576269b1 100644 --- a/channels/chan_sip.c +++ b/channels/chan_sip.c @@ -2249,9 +2249,8 @@ static void sip_destroy_peer(struct sip_peer *peer) if (peer->call) sip_destroy(peer->call); - if (peer->mwipvt) { /* We have an active subscription, delete it */ + if (peer->mwipvt) /* We have an active subscription, delete it */ sip_destroy(peer->mwipvt); - } if (peer->chanvars) { ast_variables_destroy(peer->chanvars); @@ -16257,12 +16256,23 @@ static int sip_get_codec(struct ast_channel *chan) return p->peercapability; } -/*! \brief Send a poke to all known peers */ +/*! \brief Send a poke to all known peers + Space them out 100 ms apart + XXX We might have a cool algorithm for this or use random - any suggestions? +*/ static void sip_poke_all_peers(void) { + int ms = 0; + + if (!speerobjs) /* No peers, just give up */ + return; + ASTOBJ_CONTAINER_TRAVERSE(&peerl, 1, do { ASTOBJ_WRLOCK(iterator); - sip_poke_peer(iterator); + if (iterator->pokeexpire > -1) + ast_sched_del(sched, iterator->pokeexpire); + ms += 100; + iterator->pokeexpire = ast_sched_add(sched, ms, sip_poke_peer_s, iterator); ASTOBJ_UNLOCK(iterator); } while (0) ); -- GitLab