aboutsummaryrefslogtreecommitdiffstats
path: root/channels/chan_agent.c
diff options
context:
space:
mode:
authormarkster <markster@f38db490-d61c-443f-a65b-d21fe96a405b>2003-11-08 04:35:57 +0000
committermarkster <markster@f38db490-d61c-443f-a65b-d21fe96a405b>2003-11-08 04:35:57 +0000
commit5a55a162d7d811f3bf31ef8247fc9b900e6237da (patch)
treefdfad07246db3043991f439140faab2a260dcfd4 /channels/chan_agent.c
parent578e6fddfeec4b995b24137b1fae772619a42f8c (diff)
Trustingly add Thorston's deadlock patch
git-svn-id: http://svn.digium.com/svn/asterisk/trunk@1708 f38db490-d61c-443f-a65b-d21fe96a405b
Diffstat (limited to 'channels/chan_agent.c')
-rwxr-xr-xchannels/chan_agent.c6
1 files changed, 5 insertions, 1 deletions
diff --git a/channels/chan_agent.c b/channels/chan_agent.c
index 7421f5d53..593de03cf 100755
--- a/channels/chan_agent.c
+++ b/channels/chan_agent.c
@@ -1154,10 +1154,14 @@ static int __login_exec(struct ast_channel *chan, void *data, int callbackmode)
if( options )
if( strchr( options, 's' ) )
play_announcement = 0;
+ ast_mutex_unlock(&p->lock);
+ ast_mutex_unlock(&agentlock);
if( !res && play_announcement )
res = ast_streamfile(chan, filename, chan->language);
if (!res)
ast_waitstream(chan, "");
+ ast_mutex_lock(&agentlock);
+ ast_mutex_lock(&p->lock);
if (!res) {
res = ast_set_read_format(chan, ast_best_codec(chan->nativeformats));
if (res)
@@ -1173,6 +1177,7 @@ static int __login_exec(struct ast_channel *chan, void *data, int callbackmode)
res = -1;
if (callbackmode && !res) {
/* Just say goodbye and be done with it */
+ ast_mutex_unlock(&agentlock);
if (!res)
res = ast_safe_sleep(chan, 500);
res = ast_streamfile(chan, "vm-goodbye", chan->language);
@@ -1181,7 +1186,6 @@ static int __login_exec(struct ast_channel *chan, void *data, int callbackmode)
if (!res)
res = ast_safe_sleep(chan, 1000);
ast_mutex_unlock(&p->lock);
- ast_mutex_unlock(&agentlock);
} else if (!res) {
#ifdef HONOR_MUSIC_CLASS
/* check if the moh class was changed with setmusiconhold */