From: Mark Spencer Date: Tue, 2 Dec 2003 15:52:37 +0000 (+0000) Subject: Really fix chan local races (I hope) X-Git-Tag: 0.7.0~199 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=b3e9086d5d89f7e53c0186c5251a524bdaf6ffb1;p=thirdparty%2Fasterisk.git Really fix chan local races (I hope) git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@1813 65c4cc65-6c06-0410-ace0-fbb531ad65f3 --- diff --git a/channels/chan_local.c b/channels/chan_local.c index 8cc057b81f..1e11c7b506 100755 --- a/channels/chan_local.c +++ b/channels/chan_local.c @@ -74,15 +74,15 @@ static struct local_pvt { static int local_queue_frame(struct local_pvt *p, int isoutbound, struct ast_frame *f, struct ast_channel *us) { struct ast_channel *other; +retrylock: + /* Recalculate outbound channel */ if (isoutbound) { other = p->owner; } else { other = p->chan; } - if (!other) - return 0; + /* Set glare detection */ p->glaredetect = 1; -retrylock: if (p->cancelqueue) { /* We had a glare on the hangup. Forget all this business, return and destroy p. */ @@ -90,6 +90,10 @@ retrylock: free(p); return -1; } + if (!other) { + p->glaredetect = 0; + return 0; + } if (ast_mutex_trylock(&other->lock)) { /* Failed to lock. Release main lock and try again */ ast_mutex_unlock(&p->lock);