diff --git a/src/scheme/debug.rs b/src/scheme/debug.rs index c70ac5792b..2e688519b4 100644 --- a/src/scheme/debug.rs +++ b/src/scheme/debug.rs @@ -109,7 +109,19 @@ impl KernelScheme for DebugScheme { _flags: EventFlags, token: &mut CleanLockToken, ) -> Result { - let _handle = *HANDLES.read(token.token()).get(id)?; + let handle = *HANDLES.read(token.token()).get(id)?; + + // Report readable when serial/debug input is already queued, so a reader + // that registers with an event queue AFTER input has arrived (e.g. + // fbcond's serial console feeding the getty) still learns it is + // readable, rather than relying solely on the edge-triggered + // debug_notify(). Non-input handles never report readable. + if handle.num != SpecialFds::DisableGraphicalDebug as usize + && handle.num != SpecialFds::SchemeRoot as usize + && !INPUT.is_currently_empty(token) + { + return Ok(EVENT_READ); + } Ok(EventFlags::empty()) }