pub enum RecordProcessResult {
Complete,
AsyncPending,
AsyncPendingNotify(Vec<(String, EpicsValue)>),
CompleteNoEmit,
CompleteDeferOutput,
}Expand description
Result of a record’s process() call.
Determines how the framework handles the current processing cycle.
Side-effect actions (link writes, delayed reprocess, etc.) are expressed
separately in ProcessOutcome::actions.
Variants§
Complete
Processing completed synchronously this cycle. Framework proceeds with alarm/timestamp/snapshot/OUT/FLNK.
AsyncPending
Processing started but not yet complete (PACT stays set). Current cycle skips alarm/timestamp/snapshot/OUT/FLNK. ProcessActions (if any) are still executed.
AsyncPendingNotify(Vec<(String, EpicsValue)>)
Async pending, but notify these intermediate field changes immediately. Used by motor records to flush DMOV=0 before the move completes.
CompleteNoEmit
Completed synchronously (PACT cleared, unlike AsyncPending), but the
record produced no new value to publish this cycle — the framework must
skip the value-publication epilogue (UDF clear / timestamp / monitor /
FLNK). C parity compressRecord.c:365 if (status != 1): a compress
record still accumulating toward its next compressed sample runs none of
recGblGetTimeStamp / monitor / recGblFwdLink on that cycle.
CompleteDeferOutput
Ran the value-publication epilogue NOW (UDF clear / timestamp / monitor —
VAL and the alarm fields are posted this cycle), but the OUTPUT side (OUT
link write / OEVT / forward link) is deferred to a scheduled
reprocess, with PACT held across the wait. C parity swaitRecord.c::process
(lines 425-481): when schedOutput arms the ODLY watchdog it sets
async=TRUE, so process still runs monitor() (line 475) — posting the
value side at the START of the delay — but skips the if(!async) {recGblFwdLink; pact=FALSE;} tail; the deferred execOutput (watchdog,
at delay-END) does the OUT write + OEVT + forward link and posts no
monitors. Unlike the calcout/scalcout/acalcout family, whose C process
returns BEFORE monitor() (calcoutRecord.c:282, only dlya posted), so
they defer the value side too and use AsyncPendingNotify. The deferral
must carry a ProcessAction::ReprocessAfter — that scheduled reprocess
is the continuation that releases the held PACT (same by-construction
invariant as the AsyncPendingNotify ODLY defer).
Trait Implementations§
Source§impl Clone for RecordProcessResult
impl Clone for RecordProcessResult
Source§fn clone(&self) -> RecordProcessResult
fn clone(&self) -> RecordProcessResult
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreSource§impl Debug for RecordProcessResult
impl Debug for RecordProcessResult
Source§impl PartialEq for RecordProcessResult
impl PartialEq for RecordProcessResult
Source§fn eq(&self, other: &RecordProcessResult) -> bool
fn eq(&self, other: &RecordProcessResult) -> bool
self and other values to be equal, and is used by ==.