Skip to content

A wedged collector freezes the panel silently and permanently: add a watchdog #15

Description

@ssandys

Service.qml:105 skips a refresh whenever collectProc.running is true, and nothing bounds how long that can last. A wedged collector therefore freezes the panel permanently and silently: the last snapshot stays on screen, loading stays true, no error is surfaced, and no later poll can recover it.

One route into that state is now closed. The hardened reader uses O_NONBLOCK, so a FIFO planted in the model store can no longer park the collector (trap #42). Measured before that fix: a naive open() on a FIFO or on /dev/zero hung indefinitely.

Others remain. A hung systemctl show on a degraded D-Bus is the obvious one; a socket that connects and never responds is another, since urlopen's timeout does not cover every stage.

Proposal. A watchdog Timer armed when collectProc starts: on expiry, kill the process and set collectorError so the freeze becomes a visible failure rather than a silent one. Roughly fifteen lines.

Design note. The existing spawn-failure handling (trap #10, onRunningChanged) already exists because Quickshell calls neither streamEnded() nor exited() when a process fails to spawn. A watchdog should route through the same clearing path so loading cannot stick by a second mechanism.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    hardeningRobustness, trust boundaries, and failure modes

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions