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; } }