From d866916f42c3bbb21aa6f046140737690c1ce47f Mon Sep 17 00:00:00 2001 From: ameerj <52414509+ameerj@users.noreply.github.com> Date: Mon, 3 Jan 2022 12:31:33 -0500 Subject: gpu: Use std::stop_token in WaitFence for VSync thread Fixes a hang that may occur when stopping emulation and the VSync thread is blocked on the syncpoint condition variable. --- src/core/hle/service/nvflinger/nvflinger.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'src/core/hle/service') diff --git a/src/core/hle/service/nvflinger/nvflinger.cpp b/src/core/hle/service/nvflinger/nvflinger.cpp index a22811ec1..396cc5afa 100644 --- a/src/core/hle/service/nvflinger/nvflinger.cpp +++ b/src/core/hle/service/nvflinger/nvflinger.cpp @@ -266,10 +266,11 @@ void NVFlinger::Compose() { auto& gpu = system.GPU(); const auto& multi_fence = buffer->get().multi_fence; + const auto stop_token = vsync_thread.get_stop_token(); guard->unlock(); for (u32 fence_id = 0; fence_id < multi_fence.num_fences; fence_id++) { const auto& fence = multi_fence.fences[fence_id]; - gpu.WaitFence(fence.id, fence.value); + gpu.WaitFence(fence.id, fence.value, stop_token); } guard->lock(); -- cgit v1.2.3