mirror of
https://github.com/asterisk/asterisk.git
synced 2025-10-19 19:20:35 +00:00
Really fix chan local races (I hope)
git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@1813 65c4cc65-6c06-0410-ace0-fbb531ad65f3
This commit is contained in:
@@ -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);
|
||||
|
Reference in New Issue
Block a user