Files @ 2c1fa43903ac
Branch filter:

Location: CSY/reowolf/src/runtime2/component/mod.rs

2c1fa43903ac 913 B application/rls-services+xml Show Annotation Show as Raw Download as Raw
MH
Several unfinished attempts at introducing polling
mod component_pdl;
mod component_context;
mod control_layer;
mod consensus;
mod component;
mod component_ip;

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(sched_ctx: &SchedulerCtx, 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() };
        sched_ctx.runtime.enqueue_work(comp_key);
    }
}