mirror of
https://github.com/lune-org/lune.git
synced 2024-12-12 13:00:37 +00:00
Use atomics in scheduler state instead of refcell
This commit is contained in:
parent
4fa76aa27f
commit
d1a2dc2fa6
1 changed files with 16 additions and 10 deletions
|
@ -1,10 +1,11 @@
|
||||||
use std::cell::RefCell;
|
use std::sync::atomic::{AtomicBool, AtomicU8, AtomicUsize, Ordering};
|
||||||
|
|
||||||
#[derive(Debug, Default)]
|
#[derive(Debug, Default)]
|
||||||
pub struct SchedulerState {
|
pub struct SchedulerState {
|
||||||
exit_code: RefCell<Option<u8>>,
|
exit_state: AtomicBool,
|
||||||
num_resumptions: RefCell<usize>,
|
exit_code: AtomicU8,
|
||||||
num_errors: RefCell<usize>,
|
num_resumptions: AtomicUsize,
|
||||||
|
num_errors: AtomicUsize,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl SchedulerState {
|
impl SchedulerState {
|
||||||
|
@ -13,26 +14,31 @@ impl SchedulerState {
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn add_resumption(&self) {
|
pub fn add_resumption(&self) {
|
||||||
*self.num_resumptions.borrow_mut() += 1;
|
self.num_resumptions.fetch_add(1, Ordering::Relaxed);
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn add_error(&self) {
|
pub fn add_error(&self) {
|
||||||
*self.num_errors.borrow_mut() += 1;
|
self.num_errors.fetch_add(1, Ordering::Relaxed);
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn has_errored(&self) -> bool {
|
pub fn has_errored(&self) -> bool {
|
||||||
*self.num_errors.borrow() > 0
|
self.num_errors.load(Ordering::SeqCst) > 0
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn exit_code(&self) -> Option<u8> {
|
pub fn exit_code(&self) -> Option<u8> {
|
||||||
*self.exit_code.borrow()
|
if self.exit_state.load(Ordering::SeqCst) {
|
||||||
|
Some(self.exit_code.load(Ordering::SeqCst))
|
||||||
|
} else {
|
||||||
|
None
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn has_exit_code(&self) -> bool {
|
pub fn has_exit_code(&self) -> bool {
|
||||||
self.exit_code.borrow().is_some()
|
self.exit_state.load(Ordering::SeqCst)
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn set_exit_code(&self, code: impl Into<u8>) {
|
pub fn set_exit_code(&self, code: impl Into<u8>) {
|
||||||
self.exit_code.replace(Some(code.into()));
|
self.exit_state.store(true, Ordering::SeqCst);
|
||||||
|
self.exit_code.store(code.into(), Ordering::SeqCst);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue