From 68248b91f0685209bcb14c95e0169c7a45e7e4e1 Mon Sep 17 00:00:00 2001 From: Mark Spencer <markster@digium.com> Date: Wed, 23 Jun 2004 17:41:51 +0000 Subject: [PATCH] Be sure to hold lock during answer git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@3286 65c4cc65-6c06-0410-ace0-fbb531ad65f3 --- channel.c | 8 +++++--- channels/chan_sip.c | 3 ++- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/channel.c b/channel.c index 89ebcbb4b3..dd2b814292 100755 --- a/channel.c +++ b/channel.c @@ -750,16 +750,17 @@ void ast_channel_unregister(char *type) int ast_answer(struct ast_channel *chan) { int res = 0; + ast_mutex_lock(&chan->lock); /* Stop if we're a zombie or need a soft hangup */ - if (chan->zombie || ast_check_hangup(chan)) + if (chan->zombie || ast_check_hangup(chan)) { + ast_mutex_unlock(&chan->lock); return -1; + } switch(chan->_state) { case AST_STATE_RINGING: case AST_STATE_RING: - ast_mutex_lock(&chan->lock); if (chan->pvt->answer) res = chan->pvt->answer(chan); - ast_mutex_unlock(&chan->lock); ast_setstate(chan, AST_STATE_UP); if (chan->cdr) ast_cdr_answer(chan->cdr); @@ -770,6 +771,7 @@ int ast_answer(struct ast_channel *chan) ast_cdr_answer(chan->cdr); break; } + ast_mutex_unlock(&chan->lock); return 0; } diff --git a/channels/chan_sip.c b/channels/chan_sip.c index ddb4d8a6ec..805c571d58 100755 --- a/channels/chan_sip.c +++ b/channels/chan_sip.c @@ -1597,7 +1597,7 @@ static int sip_answer(struct ast_channel *ast) char *codec; struct sip_pvt *p = ast->pvt->pvt; - + ast_mutex_lock(&p->lock); if (ast->_state != AST_STATE_UP) { @@ -1616,6 +1616,7 @@ static int sip_answer(struct ast_channel *ast) ast_log(LOG_DEBUG, "sip_answer(%s)\n", ast->name); res = transmit_response_with_sdp(p, "200 OK", &p->initreq, 1); } + ast_mutex_unlock(&p->lock); return res; } -- GitLab