Check if executor owns waking task before setting woken
This commit is contained in:
parent
b1d60cc8cd
commit
2f032f9e13
1 changed files with 6 additions and 3 deletions
|
@ -118,9 +118,12 @@ impl Wake for SafeWaker {
|
||||||
|
|
||||||
fn wake_by_ref(self: &Arc<Self>) {
|
fn wake_by_ref(self: &Arc<Self>) {
|
||||||
if let Some(task) = Weak::upgrade(&self.task) {
|
if let Some(task) = Weak::upgrade(&self.task) {
|
||||||
if !task.woken.swap(true, Ordering::AcqRel) {
|
if let Some(executor) = Weak::upgrade(&self.executor) {
|
||||||
if let Some(executor) = Weak::upgrade(&self.executor) {
|
let mut inner = executor.lock().unwrap();
|
||||||
let mut inner = executor.lock().unwrap();
|
|
||||||
|
if inner.pending.contains_key(&task.task_id)
|
||||||
|
&& !task.woken.swap(true, Ordering::AcqRel)
|
||||||
|
{
|
||||||
inner.wake(task);
|
inner.wake(task);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue