[Kernel/Threading] Fix some kernel threading issues

- broken atomic exchange on linux
- spinlock release memory buffer
- race in thread suspension
- removed misleading volatile qualifiers
This commit is contained in:
Herman S.
2025-09-27 16:26:22 +09:00
parent c4bd0c3f33
commit 4f1394bbaa
4 changed files with 34 additions and 9 deletions

View File

@@ -546,7 +546,7 @@ class PosixCondition<Timer> final : public PosixConditionBase {
}
std::weak_ptr<TimerQueueWaitItem> wait_item_;
std::function<void()> callback_;
volatile bool signal_;
bool signal_; // Protected by mutex_
const bool manual_reset_;
};
@@ -820,6 +820,7 @@ class PosixCondition<Thread> final : public PosixConditionBase {
bool is_current_thread = pthread_self() == thread_;
{
std::unique_lock lock(state_mutex_);
if (out_previous_suspend_count) {
*out_previous_suspend_count = suspend_count_;
}
@@ -908,8 +909,8 @@ class PosixCondition<Thread> final : public PosixConditionBase {
pthread_t thread_;
bool signaled_;
int exit_code_;
volatile State state_;
volatile uint32_t suspend_count_;
State state_; // Protected by state_mutex_
uint32_t suspend_count_; // Protected by state_mutex_
mutable std::mutex state_mutex_;
mutable std::mutex callback_mutex_;
mutable std::condition_variable state_signal_;