chan_pjsip: Fix deadlock when masquerading PJSIP channels.
authorRichard Mudgett <rmudgett@digium.com>
Fri, 3 Oct 2014 17:47:42 +0000 (17:47 +0000)
committerRichard Mudgett <rmudgett@digium.com>
Fri, 3 Oct 2014 17:47:42 +0000 (17:47 +0000)
commit0165c5f95aa058b0884f8dec8695237cb0bef186
tree9ca5505d80e72b574d9dad288351c760764fa8fb
parent4967478d180f2a512cfb6ff83fa115aac43978c6
chan_pjsip: Fix deadlock when masquerading PJSIP channels.

Performing a directed call pickup resulted in a deadlock when PJSIP
channels were involved.

A masquerade needs to hold onto the channel locks while it swaps channel
information between the two channels involved in the masquerade.  With
PJSIP channels, the fixup routine needed to push a fixup task onto the
PJSIP channel's serializer.  Unfortunately, if the serializer was also
processing a task that needed to lock the channel, you get deadlock.

* Added a new control frame that is used to notify the channels that a
masquerade is about to start and when it has completed.

* Added the ability to query taskprocessors if the current thread is the
taskprocessor thread.

* Added the ability to suspend/unsuspend the PJSIP serializer thread so a
masquerade could fixup the PJSIP channel without using the serializer.

ASTERISK-24356 #close
Reported by: rmudgett

Review: https://reviewboard.asterisk.org/r/4034/
........

Merged revisions 424471 from http://svn.asterisk.org/svn/asterisk/branches/12
........

Merged revisions 424472 from http://svn.asterisk.org/svn/asterisk/branches/13

git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@424473 65c4cc65-6c06-0410-ace0-fbb531ad65f3
18 files changed:
addons/chan_ooh323.c
channels/chan_iax2.c
channels/chan_misdn.c
channels/chan_motif.c
channels/chan_pjsip.c
channels/chan_sip.c
channels/chan_skinny.c
channels/chan_unistim.c
funcs/func_frame_trace.c
include/asterisk/frame.h
include/asterisk/res_pjsip_session.h
include/asterisk/taskprocessor.h
main/bridge_channel.c
main/channel.c
main/core_unreal.c
main/taskprocessor.c
res/res_pjsip_session.c
res/res_pjsip_session.exports.in