Added an early return to put_and_try_run

This commit is contained in:
Trangar 2019-08-08 09:15:11 +02:00 committed by Denis Kolodin
parent 53136b8fa9
commit 8e01a59a27

View File

@ -49,16 +49,18 @@ impl Scheduler {
pub(crate) fn put_and_try_run(&self, runnable: Box<dyn Runnable>) {
self.sequence.borrow_mut().push_back(runnable);
if self.lock.compare_and_swap(false, true, Ordering::Relaxed) == false {
loop {
let do_next = self.sequence.borrow_mut().pop_front();
if let Some(runnable) = do_next {
runnable.run();
} else {
break;
}
}
self.lock.store(false, Ordering::Relaxed);
if self.lock.compare_and_swap(false, true, Ordering::Relaxed) {
return;
}
loop {
let do_next = self.sequence.borrow_mut().pop_front();
if let Some(runnable) = do_next {
runnable.run();
} else {
break;
}
}
self.lock.store(false, Ordering::Relaxed);
}
}