Skip to content

Wizard stress case leaks an unjoined thread that test-hidden flags as a future UAF #1531

Description

@prestonbrown

make test-hidden reports a leaked thread from the wizard stress case. The suite still
passes, so this is a warning rather than a gate, but the listener's own text names the
consequence:

[ISOLATION-LEAK] test "Wizard stress: bounce step 2 <-> 3" leaked 1 thread(s): 8 -> 9
                 (likely an unjoined hv::EventLoopThread -> later UAF crash)

Why it is worth a ticket rather than a shrug

An unjoined hv::EventLoopThread outliving the test that made it is the same shape as the
WiFi backend leak fixed in test_home_widget_teardown_uaf.cpp: a worker with no join site,
alive while later tests run and while exit handlers tear down globals it still touches.
That one surfaced as a ThreadSanitizer failure in the nightly. This one has not surfaced
yet, which is the argument for chasing it before it does rather than after.

make test-hidden is the only suite that sees this class at all - test-run and
test-all shard the binary and report the Catch2 summary, so a crash after that summary
prints still reads green.

Needs

Find the owner of the thread, give it a join site that actually runs, and confirm the
listener's count returns to its baseline. If the thread is deliberately detached, say so
where the code creates it so the next reader does not re-chase this.

Seen while sweeping CI failures on 2026-09-08.

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

    tech-debtRefactor / abstraction cleanup

    Projects

    No projects

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions