From: Mark Michelson Date: Fri, 23 Jan 2009 15:40:39 +0000 (+0000) Subject: Fix broken call pickup X-Git-Tag: 1.4.24-rc1~118 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=1bef118f00b9a9fb270990205d2329fb4ae96ac1;p=thirdparty%2Fasterisk.git 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: https://origsvn.digium.com/svn/asterisk/branches/1.4@170392 65c4cc65-6c06-0410-ace0-fbb531ad65f3 --- diff --git a/main/channel.c b/main/channel.c index 88ede049ea..a8898656d5 100644 --- a/main/channel.c +++ b/main/channel.c @@ -3683,7 +3683,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 */