diff options
author | Richard Mudgett <rmudgett@digium.com> | 2010-09-21 20:33:20 +0000 |
---|---|---|
committer | Richard Mudgett <rmudgett@digium.com> | 2010-09-21 20:33:20 +0000 |
commit | 851141c131ac9ab08e1420cd29f7f2f098b09e7c (patch) | |
tree | cc0d354fa833a98bb835d863947cc6c01e57d4ee /main/channel.c | |
parent | ee5af946e2bba00fa6e7428b3f8691431ed75009 (diff) |
Merged revisions 288079-288080 via svnmerge from
https://origsvn.digium.com/svn/asterisk/branches/1.8
........
r288079 | rmudgett | 2010-09-21 15:29:51 -0500 (Tue, 21 Sep 2010) | 2 lines
Protect channel access in CONNECTED_LINE and REDIRECTING interception macro launch code.
........
r288080 | rmudgett | 2010-09-21 15:29:59 -0500 (Tue, 21 Sep 2010) | 8 lines
Simplify locking code for REDIRECTING interception macro when forwarding a call.
Simplified the locking code by using a local copy of the redirecting party
information in app_dial.c:do_forward() and app_queue.c:wait_for_answer()
for launching the REDIRECTING interception macro when a call is forwarded.
Reduced the lock time of the 'o->chan' and 'in' channels.
........
git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@288081 65c4cc65-6c06-0410-ace0-fbb531ad65f3
Diffstat (limited to 'main/channel.c')
-rw-r--r-- | main/channel.c | 10 |
1 files changed, 8 insertions, 2 deletions
diff --git a/main/channel.c b/main/channel.c index 29066ebf8..880220e91 100644 --- a/main/channel.c +++ b/main/channel.c @@ -8775,9 +8775,9 @@ int ast_channel_connected_line_macro(struct ast_channel *autoservice_chan, struc macro_args = pbx_builtin_getvar_helper(macro_chan, is_caller ? "CONNECTED_LINE_CALLER_SEND_MACRO_ARGS" : "CONNECTED_LINE_CALLEE_SEND_MACRO_ARGS"); macro_args = ast_strdupa(S_OR(macro_args, "")); - ast_channel_unlock(macro_chan); if (ast_strlen_zero(macro)) { + ast_channel_unlock(macro_chan); return -1; } @@ -8790,9 +8790,12 @@ int ast_channel_connected_line_macro(struct ast_channel *autoservice_chan, struc ast_party_connected_line_copy(¯o_chan->connected, connected); } + ast_channel_unlock(macro_chan); if (!(retval = ast_app_run_macro(autoservice_chan, macro_chan, macro, macro_args))) { + ast_channel_lock(macro_chan); ast_channel_update_connected_line(macro_chan, ¯o_chan->connected, NULL); + ast_channel_unlock(macro_chan); } return retval; @@ -8811,9 +8814,9 @@ int ast_channel_redirecting_macro(struct ast_channel *autoservice_chan, struct a macro_args = pbx_builtin_getvar_helper(macro_chan, is_caller ? "REDIRECTING_CALLER_SEND_MACRO_ARGS" : "REDIRECTING_CALLEE_SEND_MACRO_ARGS"); macro_args = ast_strdupa(S_OR(macro_args, "")); - ast_channel_unlock(macro_chan); if (ast_strlen_zero(macro)) { + ast_channel_unlock(macro_chan); return -1; } @@ -8826,10 +8829,13 @@ int ast_channel_redirecting_macro(struct ast_channel *autoservice_chan, struct a ast_party_redirecting_copy(¯o_chan->redirecting, redirecting); } + ast_channel_unlock(macro_chan); retval = ast_app_run_macro(autoservice_chan, macro_chan, macro, macro_args); if (!retval) { + ast_channel_lock(macro_chan); ast_channel_update_redirecting(macro_chan, ¯o_chan->redirecting, NULL); + ast_channel_unlock(macro_chan); } return retval; |