1use std::sync::{
2 atomic::{AtomicBool, Ordering},
3 Arc,
4};
5
6use crossbeam_utils::sync::Unparker;
7
8pub(crate) struct MainTaskContext {
10 exited: Arc<AtomicBool>,
11 unparker: Unparker,
12}
13
14impl MainTaskContext {
15 pub(crate) fn new(unparker: Unparker) -> Self {
16 Self {
17 exited: Arc::new(AtomicBool::new(false)),
18 unparker,
19 }
20 }
21
22 pub(crate) fn exited(&self) -> Arc<AtomicBool> {
23 self.exited.clone()
24 }
25
26 pub(crate) fn exit(&self) {
27 self.exited.store(true, Ordering::Release);
28 self.unparker.unpark();
29 }
30}