Block a user
#324: read task.turnId once in finishAsyncTask; analysis of the wider unlocked-ask asymmetry
answer() mutates a Task under sessionLocks while ask()'s timeout path mutates the same Task under no lock — finishAsyncTask can throw NPE on a null turnId
answer() mutates a Task under sessionLocks while ask()'s timeout path mutates the same Task under no lock — finishAsyncTask can throw NPE on a null turnId
Merged as 02e6aef (PR #327). Verified by me, not taken on the worker's word.
What I checked myself
The branch was behind main (git merge-base --is-ancestor said so), so I merged with…
The top-level deferred-key list has the same drift as #323, and two keys are read both from the startup snapshot and live — no single classification is right for them
fleetd#323: close the reload-classifier drift with a reflection coverage test
The reload classifier says "compares every component the launcher reads at spawn" and misses four keys, so those reloads report success and do nothing
The reload classifier says "compares every component the launcher reads at spawn" and misses four keys, so those reloads report success and do nothing
Merged as the merge commit above, with one follow-up commit e545c08. Pushed to main.
Build on main: Tests run: 1339, Failures: 0, Errors: 0, Skipped: 0 — BUILD SUCCESS, unpiped. The…
answer() mutates a Task under sessionLocks while ask()'s timeout path mutates the same Task under no lock — finishAsyncTask can throw NPE on a null turnId
#318: release() no longer strands a delivery that lands while it is running
#316: re-check worktree dirtiness after the pane stops, before removing it
A reply delivered while release() is running is stranded unacked forever: #298 closed "already held", not "arrives during release"
The dirty-worktree check runs before the worker is stopped, so work written during teardown is deleted with no preserve and no snapshot
A reply delivered while release() is running is stranded unacked forever: #298 closed "already held", not "arrives during release"
Merged as fa1f496. Pushed to main.
Build on main after the merge: Tests run: 1336, Failures: 0, Errors: 0, Skipped: 0 — BUILD SUCCESS, unpiped.
The mechanism is the right one
The…
The dirty-worktree check runs before the worker is stopped, so work written during teardown is deleted with no preserve and no snapshot
Merged as 65f98ba, with one follow-up commit 8426c35. Pushed to main.
Build on main after the merge: Tests run: 1334, Failures: 0, Errors: 0, Skipped: 0 — BUILD SUCCESS. After my…
The reload classifier says "compares every component the launcher reads at spawn" and misses four keys, so those reloads report success and do nothing