From: Olle Johansson Date: Tue, 27 Jun 2006 18:00:09 +0000 (+0000) Subject: issue #7033 - Don't burst pokes to peers at load or reload. X-Git-Tag: 1.4.0-beta1~750 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=6d866978673b5a43bd4fe8a915f11e3ab833dbba;p=thirdparty%2Fasterisk.git 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 --- 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) );