fix(windows): hw_cursor_capable must not assume an initialised display manager
The FIRST session's Welcome runs before any backend construction (vdisplay::open happens at display prep, after the Welcome), so the capability probe's vdm() expect panicked the very first handshake of a fresh service — the client saw a dead connect and auto-wake kicked in. init() is idempotent and the driver facade is a unit struct, so the probe now initialises the manager itself. Found on-glass (.173, first Mac-client connect), fix deployed there. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
@@ -274,8 +274,13 @@ pub fn vdm() -> &'static VirtualDisplayManager {
|
||||
/// handshake-latched protocol version, opening the control device once if no session has
|
||||
/// opened it yet this service run (the same open every session performs anyway) — so the
|
||||
/// Welcome-time capability decision never guesses. `false` when the driver is missing/stale.
|
||||
///
|
||||
/// The FIRST session's Welcome precedes any backend construction (`vdisplay::open` runs at
|
||||
/// display prep, after the Welcome), so this must not assume an initialised manager —
|
||||
/// `init` is idempotent and constructing the driver facade is free (on-glass finding: the
|
||||
/// `vdm()` expect panicked the very first handshake of a fresh service).
|
||||
pub fn hw_cursor_capable() -> bool {
|
||||
let m = vdm();
|
||||
let m = init(Box::new(crate::driver::PfVdisplayDriver));
|
||||
let v = m.driver_proto.load(Ordering::Relaxed);
|
||||
if v != 0 {
|
||||
return v >= 5;
|
||||
|
||||
Reference in New Issue
Block a user