Check if executor owns waking task before setting woken

This commit is contained in:
Aode (lion) 2022-02-14 19:29:05 -06:00
parent b1d60cc8cd
commit 2f032f9e13

View file

@ -118,9 +118,12 @@ impl Wake for SafeWaker {
fn wake_by_ref(self: &Arc<Self>) {
if let Some(task) = Weak::upgrade(&self.task) {
if !task.woken.swap(true, Ordering::AcqRel) {
if let Some(executor) = Weak::upgrade(&self.executor) {
let mut inner = executor.lock().unwrap();
if let Some(executor) = Weak::upgrade(&self.executor) {
let mut inner = executor.lock().unwrap();
if inner.pending.contains_key(&task.task_id)
&& !task.woken.swap(true, Ordering::AcqRel)
{
inner.wake(task);
}
}