summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMark Spencer <markster@digium.com>2003-07-14 03:45:53 +0000
committerMark Spencer <markster@digium.com>2003-07-14 03:45:53 +0000
commit4e6c02b6add240cbc12785e5187f6b7d73ee2f41 (patch)
tree511f2ef001cf1dc84d1260d4b953d3121a9301f9
parent936baa4dfa2a78d0c901dd2ac588c61620430cc7 (diff)
instead of hanging up channel after masquerade (risking deadlock), mark it as a zombie, then masquerade
git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@1180 65c4cc65-6c06-0410-ace0-fbb531ad65f3
-rwxr-xr-xchannels/chan_agent.c4
1 files changed, 3 insertions, 1 deletions
diff --git a/channels/chan_agent.c b/channels/chan_agent.c
index 4d9b2d551..e6c82d019 100755
--- a/channels/chan_agent.c
+++ b/channels/chan_agent.c
@@ -632,9 +632,11 @@ static int check_availability(struct agent_pvt *newlyavailable, int needlock)
if (p->abouttograb) {
ast_setstate(parent, AST_STATE_UP);
ast_setstate(chan, AST_STATE_UP);
+ /* Go ahead and mark the channel as a zombie so that masquerade will
+ destroy it for us, and we need not call ast_hangup */
+ chan->zombie = 1;
ast_channel_masquerade(parent, chan);
p->abouttograb = 0;
- ast_hangup(chan);
} else {
ast_log(LOG_DEBUG, "Sneaky, parent disappeared in the mean time...\n");
agent_cleanup(newlyavailable);