RFC 016 Chunk 1: runtime introspection read primitive
snapshot() / actor_info() return owned ActorInfo over the slab: pid, names, fine-grained scheduling state, parent edge, trap flag, mailbox depth, and monitor/link/joiner counts. Pure reads, no hot-path change. - ActorState maps the packed slot word (no new storage); introspect.rs. - D1: RuntimeSnapshot carries SNAPSHOT_FORMAT_VERSION from day one. - D2: per-slot tearing (ps semantics); actor_info coherent per actor. - D3: mailbox depth included. Registry channels now stored behind an ErasedSender trait (downcast for clone_sender + type-erased queued_len); depth summed over published channels under the registry Leaf (Leaf -> Channel), kept out of the cold-lock pass so no two Leaves are ever held at once. Depth covers published channels only. - Done slots surface as root-less tombstones.
This commit is contained in:
@@ -457,6 +457,14 @@ impl Slot {
|
||||
self.word.generation()
|
||||
}
|
||||
|
||||
/// Raw packed state word, for introspection's lock-free classify
|
||||
/// (`introspect.rs`). The coarse `status_for` only distinguishes
|
||||
/// Live/Done/Stale; the snapshot needs the fine scheduling state.
|
||||
#[inline]
|
||||
pub(crate) fn state_word(&self) -> u64 {
|
||||
self.word.load()
|
||||
}
|
||||
|
||||
/// A pid's-eye snapshot of the slot. Cold paths re-read this under the
|
||||
/// cold lock (generation can't change while it is held).
|
||||
#[inline]
|
||||
|
||||
Reference in New Issue
Block a user