From b3e9086d5d89f7e53c0186c5251a524bdaf6ffb1 Mon Sep 17 00:00:00 2001 From: Mark Spencer Date: Tue, 2 Dec 2003 15:52:37 +0000 Subject: [PATCH] Really fix chan local races (I hope) git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@1813 65c4cc65-6c06-0410-ace0-fbb531ad65f3 --- channels/chan_local.c | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) 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);