summaryrefslogtreecommitdiff
path: root/src/core
diff options
context:
space:
mode:
authorameerj <52414509+ameerj@users.noreply.github.com>2022-01-03 12:31:33 -0500
committerameerj <52414509+ameerj@users.noreply.github.com>2022-01-03 12:31:33 -0500
commitd866916f42c3bbb21aa6f046140737690c1ce47f (patch)
treecd549393ec6076b812d75abc7be87f3ec4b96312 /src/core
parentda8e0f6571095e50aa58ec5c4e3a1bd60f90c581 (diff)
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.
Diffstat (limited to 'src/core')
-rw-r--r--src/core/hle/service/nvflinger/nvflinger.cpp3
1 files changed, 2 insertions, 1 deletions
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();