v0.3.9-pre.002

This commit is contained in:
2026-09-04 14:21:05 +02:00
parent 5c797827f7
commit 7d0710a1e6
17 changed files with 1235 additions and 22 deletions

View File

@@ -0,0 +1,44 @@
// file: crates/ksp-worker-api/src/stop.rs
// version: 1
/// Runtime-neutral cloneable token carrying cooperative Worker stop intent.
#[derive(Clone)]
pub struct WorkerStopToken {
requested: std::sync::Arc<std::sync::atomic::AtomicBool>,
}
impl WorkerStopToken {
/// Creates a token with no stop request.
#[must_use]
pub fn new() -> Self {
return Self { requested: std::sync::Arc::new(std::sync::atomic::AtomicBool::new(false)) };
}
/// Requests stop and returns `true` only for the first request shared by all clones.
#[must_use]
pub fn request_stop(&self) -> bool {
return !self.requested.swap(true, std::sync::atomic::Ordering::AcqRel);
}
/// Reports whether stop has been requested through any clone.
#[must_use]
pub fn is_stop_requested(&self) -> bool {
return self.requested.load(std::sync::atomic::Ordering::Acquire);
}
}
impl std::default::Default for WorkerStopToken {
fn default() -> Self {
return Self::new();
}
}
impl std::fmt::Debug for WorkerStopToken {
fn fmt(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
return formatter.debug_struct("WorkerStopToken").field("stop_requested", &self.is_stop_requested()).finish();
}
}
#[cfg(test)]
#[path = "../unit_tests/stop.rs"]
mod tests;