From: Richard Mudgett Date: Sat, 5 Mar 2016 00:25:21 +0000 (-0600) Subject: chan_sip.c: Made sip_reinvite_retry() call sip_pvt_lock_full(). X-Git-Tag: 11.22.0-rc1~7 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=refs%2Fchanges%2F86%2F2386%2F1;p=thirdparty%2Fasterisk.git chan_sip.c: Made sip_reinvite_retry() call sip_pvt_lock_full(). Change-Id: I90f04208a089f95488a2460185a8dbc3f6acca12 --- diff --git a/channels/chan_sip.c b/channels/chan_sip.c index b7e4c695b3..d6a4bb3335 100644 --- a/channels/chan_sip.c +++ b/channels/chan_sip.c @@ -22649,18 +22649,14 @@ static int sip_reinvite_retry(const void *data) struct sip_pvt *p = (struct sip_pvt *) data; struct ast_channel *owner; - sip_pvt_lock(p); /* called from schedule thread which requires a lock */ - while ((owner = p->owner) && ast_channel_trylock(owner)) { - sip_pvt_unlock(p); - usleep(1); - sip_pvt_lock(p); - } + owner = sip_pvt_lock_full(p); ast_set_flag(&p->flags[0], SIP_NEEDREINVITE); p->waitid = -1; check_pendings(p); sip_pvt_unlock(p); if (owner) { ast_channel_unlock(owner); + ast_channel_unref(owner); } dialog_unref(p, "unref the dialog ptr from sip_reinvite_retry, because it held a dialog ptr"); return 0;