Skip to content
Snippets Groups Projects
  • George Joseph's avatar
    186ef1a6
    stasis/control: Fix possible deadlock with swap channel · 186ef1a6
    George Joseph authored
    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
    186ef1a6
    History
    stasis/control: Fix possible deadlock with swap channel
    George Joseph authored
    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
bridge.c 161.96 KiB