diff options
| author | ameerj <52414509+ameerj@users.noreply.github.com> | 2022-01-03 12:31:33 -0500 |
|---|---|---|
| committer | ameerj <52414509+ameerj@users.noreply.github.com> | 2022-01-03 12:31:33 -0500 |
| commit | d866916f42c3bbb21aa6f046140737690c1ce47f (patch) | |
| tree | cd549393ec6076b812d75abc7be87f3ec4b96312 /src/core | |
| parent | da8e0f6571095e50aa58ec5c4e3a1bd60f90c581 (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.cpp | 3 |
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(); |
