From 66252c0f4b2afa5fbd4d680c5cd389c2de61307b Mon Sep 17 00:00:00 2001 From: Mark Spencer Date: Wed, 13 Aug 2003 18:29:58 +0000 Subject: [PATCH] Lock on indication, fix agent buglet git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@1313 65c4cc65-6c06-0410-ace0-fbb531ad65f3 --- channel.c | 7 +++++-- channels/chan_agent.c | 2 ++ 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/channel.c b/channel.c index 81f3a66605..dd80cc85e1 100755 --- a/channel.c +++ b/channel.c @@ -1150,6 +1150,7 @@ int ast_indicate(struct ast_channel *chan, int condition) /* Stop if we're a zombie or need a soft hangup */ if (chan->zombie || ast_check_hangup(chan)) return -1; + ast_mutex_lock(&chan->lock); if (chan->pvt->indicate) res = chan->pvt->indicate(chan, condition); if (!chan->pvt->indicate || res) { @@ -1173,17 +1174,19 @@ int ast_indicate(struct ast_channel *chan, int condition) if (ts && ts->data[0]) { ast_log(LOG_DEBUG, "Driver for channel '%s' does not support indication %d, emulating it\n", chan->name, condition); ast_playtones_start(chan,0,ts->data, 1); + res = 0; } else if (condition == AST_CONTROL_PROGRESS) { /* ast_playtones_stop(chan); */ } else { /* not handled */ ast_log(LOG_WARNING, "Unable to handle indication %d for '%s'\n", condition, chan->name); - return -1; + res = -1; } } else ast_playtones_stop(chan); } - return 0; + ast_mutex_unlock(&chan->lock); + return res; } int ast_recvchar(struct ast_channel *chan, int timeout) diff --git a/channels/chan_agent.c b/channels/chan_agent.c index 3075643290..3a67573e56 100755 --- a/channels/chan_agent.c +++ b/channels/chan_agent.c @@ -246,6 +246,8 @@ static struct ast_frame *agent_read(struct ast_channel *ast) ast_mutex_lock(&p->lock); CHECK_FORMATS(ast, p); if (p->chan) { + p->chan->exception = ast->exception; + p->chan->fdno = ast->fdno; f = ast_read(p->chan); } else f = &null_frame;