Fix a race condition in Waiter

This commit is contained in:
Ruihan Li
2023-12-30 21:05:41 +08:00
committed by Tate, Hongliang Tian
parent 28d51a4496
commit 98bb9c5256

View File

@ -164,12 +164,12 @@ impl Waiter {
/// make self into wait status until be called wake up /// make self into wait status until be called wake up
pub fn wait(&self) { pub fn wait(&self) {
self.is_woken_up.store(false, Ordering::SeqCst);
self.task.inner_exclusive_access().task_status = TaskStatus::Sleeping; self.task.inner_exclusive_access().task_status = TaskStatus::Sleeping;
while !self.is_woken_up.load(Ordering::SeqCst) { while !self.is_woken_up.load(Ordering::SeqCst) {
schedule(); schedule();
} }
self.task.inner_exclusive_access().task_status = TaskStatus::Runnable; self.task.inner_exclusive_access().task_status = TaskStatus::Runnable;
self.is_woken_up.store(false, Ordering::SeqCst);
} }
pub fn is_woken_up(&self) -> bool { pub fn is_woken_up(&self) -> bool {