diff --git a/camera/vdi_base/common/pipeline_core/nodes/src/source_node/source_node.cpp b/camera/vdi_base/common/pipeline_core/nodes/src/source_node/source_node.cpp index ba631bf770150e5c32c04fedb442d6145441cc2d..ad9fbc4412645809e0d0100dd7b6f1548f0c50f1 100644 --- a/camera/vdi_base/common/pipeline_core/nodes/src/source_node/source_node.cpp +++ b/camera/vdi_base/common/pipeline_core/nodes/src/source_node/source_node.cpp @@ -295,8 +295,15 @@ void SourceNode::PortHandler::DistributeBuffers() std::shared_ptr buffer = nullptr; { std::unique_lock l(rblock); - rbcv.wait(l, [this] { return !dbtRun || !respondBufferList.empty(); }); - if (!dbtRun) { + auto timeout = std::chrono::system_clock::now() + std::chrono::milliseconds(5000); // 5000ms + if (!rbcv.wait_until(l, timeout, [this] { + return (!dbtRun || !respondBufferList.empty()); + })) { + CAMERA_LOGE("DistributeBuffers timeout, dbtRun=%{public}d, respondBufferList size=%{public}d", + dbtRun.load(std::memory_order_acquire), respondBufferList.size()); + } + + if (!dbtRun || respondBufferList.empty()) { return; }