]> git.ipfire.org Git - thirdparty/asterisk.git/commit
stasis/control: Fix possible deadlock with swap channel
authorGeorge Joseph <gjoseph@digium.com>
Fri, 1 Sep 2017 10:17:02 +0000 (04:17 -0600)
committerRichard Mudgett <rmudgett@digium.com>
Wed, 6 Sep 2017 17:58:25 +0000 (12:58 -0500)
commit983f3e1f0fb7c7089cf13c33b3d3fe515d8d458e
tree3aca4b26e7a3b800b1c9c1f2916244f125cee82c
parent47e4cbc3952b08c24e6a22c943442b2382c13861
stasis/control:  Fix possible deadlock with swap channel

If an error occurs during a bridge impart it's possible that
the "bridge_after" callback might try to run before
control_swap_channel_in_bridge has been signalled to continue.
Since control_swap_channel_in_bridge is holding the control lock
and the callback needs it, a deadlock will occur.

* control_swap_channel_in_bridge now only holds the control
  lock while it's actually modifying the control structure and
  releases it while the bridge impart is running.
* bridge_after_cb is now tolerant of impart failures.

Change-Id: Ifd239aa93955b3eb475521f61e284fcb0da2c3b3
include/asterisk/bridge_after.h
main/bridge.c
main/bridge_after.c
res/stasis/control.c