issue #7033 - Don't burst pokes to peers at load or reload.
authorOlle Johansson <oej@edvina.net>
Tue, 27 Jun 2006 18:00:09 +0000 (18:00 +0000)
committerOlle Johansson <oej@edvina.net>
Tue, 27 Jun 2006 18:00:09 +0000 (18:00 +0000)
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

index 1856c9a..0757626 100644 (file)
@@ -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)
        );