rbd-mirror: take MirrorStatusUpdater lock by value in queue_update_task
queue_update_task() took the lock by rvalue reference, so its early returns never released it. In handle_update_task() that left m_lock held across the on_finish->complete() calls; during shutdown a completion can re-enter try_remove_mirror_image_status() and re-lock m_lock, deadlocking. Take the unique_lock by value so it unlocks on every return path. Fixes: https://tracker.ceph.com/issues/78047 Signed-off-by: Sun Yuechi <sunyuechi@iscas.ac.cn>
S
Sun Yuechi committed
b450195246cfeb7eabcaf8da53a433b98f279fee
Parent: 83f218a