From bfdfae9365e11bf6ede3709e91882148e26ebc21 Mon Sep 17 00:00:00 2001 From: markster Date: Tue, 2 Dec 2003 15:52:37 +0000 Subject: Really fix chan local races (I hope) git-svn-id: http://svn.digium.com/svn/asterisk/trunk@1813 f38db490-d61c-443f-a65b-d21fe96a405b --- channels/chan_local.c | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) (limited to 'channels/chan_local.c') diff --git a/channels/chan_local.c b/channels/chan_local.c index 8cc057b81..1e11c7b50 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); -- cgit v1.2.3