mod component_pdl; mod component_context; mod control_layer; mod consensus; mod component; mod component_random; mod component_internet; pub(crate) use component::{Component, CompScheduling}; pub(crate) use component_pdl::{CompPDL}; pub(crate) use component_context::CompCtx; pub(crate) use control_layer::{ControlId}; use super::scheduler::*; use super::runtime::*; /// If the component is sleeping, then that flag will be atomically set to /// false. If we're the ones that made that happen then we add it to the work /// queue. pub(crate) fn wake_up_if_sleeping(runtime: &RuntimeInner, comp_id: CompId, handle: &CompHandle) { use std::sync::atomic::Ordering; let should_wake_up = handle.sleeping .compare_exchange(true, false, Ordering::AcqRel, Ordering::Acquire) .is_ok(); if should_wake_up { let comp_key = unsafe{ comp_id.upgrade() }; runtime.enqueue_work(comp_key); } }