From 81dd887e744ceb1eab95eb21604e1fc78ad9c4b1 Mon Sep 17 00:00:00 2001 From: "Herman S." <429230+has207@users.noreply.github.com> Date: Sun, 12 Oct 2025 21:00:11 +0900 Subject: [PATCH] [Kernel] Thread suspend for posix to match windows semantics --- src/xenia/base/threading_posix.cc | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/xenia/base/threading_posix.cc b/src/xenia/base/threading_posix.cc index a2c634d08..862c66911 100644 --- a/src/xenia/base/threading_posix.cc +++ b/src/xenia/base/threading_posix.cc @@ -703,11 +703,17 @@ class PosixCondition final : public PosixConditionBase { } WaitStarted(); std::unique_lock lock(state_mutex_); - if (state_ != State::kSuspended) return false; + // Check if thread has any suspend count (Windows allows resume even if + // running) + if (suspend_count_ == 0) return false; if (out_previous_suspend_count) { *out_previous_suspend_count = suspend_count_; } --suspend_count_; + // If suspend count reaches 0, transition to running + if (suspend_count_ == 0 && state_ == State::kSuspended) { + state_ = State::kRunning; + } state_signal_.notify_all(); return true; }