diff options
author | mmichelson <mmichelson@f38db490-d61c-443f-a65b-d21fe96a405b> | 2009-01-23 15:49:50 +0000 |
---|---|---|
committer | mmichelson <mmichelson@f38db490-d61c-443f-a65b-d21fe96a405b> | 2009-01-23 15:49:50 +0000 |
commit | b45b43d5b8ef46c3cbf1f008dcf667dc195b7783 (patch) | |
tree | e24778176c4555f8384b355968bc73776e1de3e9 /main | |
parent | c4d2efa55e6e5eeba32e1ee99ae3f97074f65e8a (diff) |
Merged revisions 170393 via svnmerge from
https://origsvn.digium.com/svn/asterisk/trunk
................
r170393 | mmichelson | 2009-01-23 09:44:27 -0600 (Fri, 23 Jan 2009) | 36 lines
Merged revisions 170392 via svnmerge from
https://origsvn.digium.com/svn/asterisk/branches/1.4
........
r170392 | mmichelson | 2009-01-23 09:40:39 -0600 (Fri, 23 Jan 2009) | 28 lines
Fix broken call pickup
There was a subtle change in ast_do_masquerade which
resulted in failed attempts to pickup calls. The problem
was that the value of the AST_FLAG_OUTGOING flag was
copied from the clone to the original channel. In the case
of call pickup, this meant that the AST_FLAG_OUTGOING flag
ended up being cleared on the channel that was attempting
to execute the pickup.
Because this flag was not set, when ast_read came across
an answer frame, it ignored it. The result of this was that
the calling channel was never properly answered.
This fix changes the behavior in ast_do_masquerade to set
the flags on the original channel to the union of the flags
on the clone channel. This way, if the AST_FLAG_OUTGOING
flag is set on either of the two channels involved in the
masquerade, the resulting channel will have the flag set
as well.
(closes issue #14206)
Reported by: francesco_r
Patches:
14206.patch uploaded by putnopvut (license 60)
Tested by: francesco_r, aragon, putnopvut
........
................
git-svn-id: http://svn.digium.com/svn/asterisk/branches/1.6.0@170394 f38db490-d61c-443f-a65b-d21fe96a405b
Diffstat (limited to 'main')
-rw-r--r-- | main/channel.c | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/main/channel.c b/main/channel.c index e13b64c8a..41a62aeb7 100644 --- a/main/channel.c +++ b/main/channel.c @@ -4102,7 +4102,7 @@ int ast_do_masquerade(struct ast_channel *original) /* XXX What about blocking, softhangup, blocker, and lock and blockproc? XXX */ /* Application and data remain the same */ /* Clone exception becomes real one, as with fdno */ - ast_copy_flags(original, clone, AST_FLAG_EXCEPTION | AST_FLAG_OUTGOING); + ast_set_flag(original, ast_test_flag(clone, AST_FLAG_OUTGOING | AST_FLAG_EXCEPTION)); original->fdno = clone->fdno; /* Schedule context remains the same */ /* Stream stuff stays the same */ |