From 8beb7a792a830ddee8b6dd548ab640a8a010440c Mon Sep 17 00:00:00 2001 From: Dmugetsu Date: Thu, 29 May 2025 11:22:35 -0600 Subject: [PATCH] avoiding deadlocks --- src/core/libraries/videoout/driver.cpp | 21 +++++++++++++-------- 1 file changed, 13 insertions(+), 8 deletions(-) diff --git a/src/core/libraries/videoout/driver.cpp b/src/core/libraries/videoout/driver.cpp index 41aeff142..64c6d708d 100644 --- a/src/core/libraries/videoout/driver.cpp +++ b/src/core/libraries/videoout/driver.cpp @@ -311,16 +311,21 @@ void VideoOutDriver::PresentThread(std::stop_token token) { } } else { Flip(request); - { - std::scoped_lock lock{request.port->port_mutex}; - request.port->flip_status.flip_pending_num--; - if (request.eop) { - request.port->flip_status.gc_queue_num--; + // add second request to avoid potential deadlocks + const auto second = receive_request(); + if (second) { + Flip(second); + { + std::scoped_lock lock{second.port->port_mutex}; + second.port->flip_status.flip_pending_num--; + if (second.eop) { + second.port->flip_status.gc_queue_num--; + } + second.port->vo_cv + .notify_all(); // wake up threads waiting to submit more flips } - request.port->vo_cv - .notify_one(); // this wake up threads waiting to submit more flips + FRAME_END; } - FRAME_END; } }