Skip to content
Snippets Groups Projects
Commit 6d866978 authored by Olle Johansson's avatar Olle Johansson
Browse files

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
parent 6895f108
Branches
Tags
No related merge requests found
...@@ -2249,9 +2249,8 @@ static void sip_destroy_peer(struct sip_peer *peer) ...@@ -2249,9 +2249,8 @@ static void sip_destroy_peer(struct sip_peer *peer)
if (peer->call) if (peer->call)
sip_destroy(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); sip_destroy(peer->mwipvt);
}
   
if (peer->chanvars) { if (peer->chanvars) {
ast_variables_destroy(peer->chanvars); ast_variables_destroy(peer->chanvars);
...@@ -16257,12 +16256,23 @@ static int sip_get_codec(struct ast_channel *chan) ...@@ -16257,12 +16256,23 @@ static int sip_get_codec(struct ast_channel *chan)
return p->peercapability; 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) 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_CONTAINER_TRAVERSE(&peerl, 1, do {
ASTOBJ_WRLOCK(iterator); 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); ASTOBJ_UNLOCK(iterator);
} while (0) } while (0)
); );
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment