diff --git a/channels/chan_sip.c b/channels/chan_sip.c index e1f6f13301..45b4a80083 100644 --- a/channels/chan_sip.c +++ b/channels/chan_sip.c @@ -16613,6 +16613,8 @@ static int sip_poke_peer_now(const void *data) struct sip_peer *peer = (struct sip_peer *) data; peer->pokeexpire = -1; +usleep(ast_random() % 1000 * 500); +if (peer->pokeexpire != -1) ast_log(LOG_WARNING, "sip_poke_peer_now: about to explode %d (%p)\n", peer->pokeexpire, peer); sip_poke_peer(peer, 0); sip_unref_peer(peer, "removing poke peer ref"); @@ -31996,12 +31998,15 @@ static struct sip_peer *build_peer(const char *name, struct ast_variable *v_head * a lock inversion so pass it off to the scheduler * thread. */ - AST_SCHED_REPLACE_UNREF(peer->pokeexpire, sched, +int tmp = peer->pokeexpire; + AST_SCHED_REPLACE_UNREF(tmp, sched, 0, /* Poke the peer ASAP */ sip_poke_peer_now, peer, sip_unref_peer(_data, "removing poke peer ref"), sip_unref_peer(peer, "removing poke peer ref"), sip_ref_peer(peer, "adding poke peer ref")); +usleep(ast_random() % 1000 * 500); +peer->pokeexpire = tmp; } }