[svn-commits] mnicholson: branch 1.4 r311203 - /branches/1.4/channels/chan_agent.c
SVN commits to the Digium repositories
svn-commits at lists.digium.com
Thu Mar 17 14:14:41 CDT 2011
Author: mnicholson
Date: Thu Mar 17 14:14:37 2011
New Revision: 311203
URL: http://svnview.digium.com/svn/asterisk?view=rev&rev=311203
Log:
Don't hold the pvt lock while streaming a file.
ABE-2756
Modified:
branches/1.4/channels/chan_agent.c
Modified: branches/1.4/channels/chan_agent.c
URL: http://svnview.digium.com/svn/asterisk/branches/1.4/channels/chan_agent.c?view=diff&rev=311203&r1=311202&r2=311203
==============================================================================
--- branches/1.4/channels/chan_agent.c (original)
+++ branches/1.4/channels/chan_agent.c Thu Mar 17 14:14:37 2011
@@ -751,6 +751,7 @@
struct agent_pvt *p = ast->tech_pvt;
int res = -1;
int newstate=0;
+ struct ast_channel *chan;
ast_mutex_lock(&p->lock);
p->acknowledged = 0;
if (!p->chan) {
@@ -783,14 +784,25 @@
ast_verbose(VERBOSE_PREFIX_3 "agent_call, call to agent '%s' call on '%s'\n", p->agent, p->chan->name);
if (option_debug > 2)
ast_log(LOG_DEBUG, "Playing beep, lang '%s'\n", p->chan->language);
- res = ast_streamfile(p->chan, beep, p->chan->language);
+
+ chan = p->chan;
+ ast_mutex_unlock(&p->lock);
+
+ res = ast_streamfile(chan, beep, chan->language);
if (option_debug > 2)
ast_log(LOG_DEBUG, "Played beep, result '%d'\n", res);
if (!res) {
- res = ast_waitstream(p->chan, "");
+ res = ast_waitstream(chan, "");
if (option_debug > 2)
ast_log(LOG_DEBUG, "Waited for stream, result '%d'\n", res);
}
+
+ ast_mutex_lock(&p->lock);
+ if (p->chan != chan) {
+ /* chan went away while we were streaming */
+ res = -1;
+ }
+
if (!res) {
res = ast_set_read_format(p->chan, ast_best_codec(p->chan->nativeformats));
if (option_debug > 2)
More information about the svn-commits
mailing list