49 lines
1.9 KiB
Markdown
49 lines
1.9 KiB
Markdown
|
|
---
|
||
|
|
model: openai/gpt-5.6-sol
|
||
|
|
service: opencode
|
||
|
|
timestamp: 2026-08-21T04:08:03Z
|
||
|
|
git_ref: 3c1bbe73
|
||
|
|
diff_cmd: git diff HEAD~1..HEAD
|
||
|
|
---
|
||
|
|
|
||
|
|
Compare the remaining child-registration and reaping experiment with
|
||
|
|
PR #484, then identify the next review item without changing code.
|
||
|
|
|
||
|
|
The next item is the late-child admission race. A spawn can pass
|
||
|
|
`ActorNursery.start_actor()`'s early cancellation check, then be absent
|
||
|
|
from `ActorNursery.cancel()`'s child snapshot and register afterward.
|
||
|
|
The existing reap-request latch releases its monitor but does not send
|
||
|
|
runtime cancellation, so the monitor can wait forever for a still-live
|
||
|
|
process.
|
||
|
|
|
||
|
|
> `git diff HEAD~1..HEAD -- tractor/runtime/_supervise.py`
|
||
|
|
|
||
|
|
`ActorNursery._register_child()` publishes the child, installs its reap
|
||
|
|
events, and samples `ActorNursery._cancel_called` without a checkpoint.
|
||
|
|
The two scheduler orderings are then complete: registration first puts
|
||
|
|
the child in the cancel snapshot, while cancellation first makes the
|
||
|
|
backend abort the late registration.
|
||
|
|
|
||
|
|
> `git diff HEAD~1..HEAD -- tractor/spawn/_mp.py`
|
||
|
|
|
||
|
|
The multiprocessing backend registers immediately before `proc.start()`
|
||
|
|
and refuses to start a process already owned by nursery cancellation.
|
||
|
|
There is no Trio checkpoint between registration and process startup.
|
||
|
|
|
||
|
|
> `git diff HEAD~1..HEAD -- tractor/spawn/_trio.py`
|
||
|
|
|
||
|
|
The Trio backend registers immediately after `open_process()` and kills
|
||
|
|
the newly opened process if cancellation won the registration race. Its
|
||
|
|
stale unused `get_runtime_vars` import is removed so the touched module
|
||
|
|
remains lint-clean.
|
||
|
|
|
||
|
|
> `git diff HEAD~1..HEAD -- tests/test_to_actor.py`
|
||
|
|
|
||
|
|
Deterministic regressions prove late registration observes cancellation
|
||
|
|
and that the MP backend never starts a process after cancellation owns
|
||
|
|
its registration.
|
||
|
|
|
||
|
|
PR #484 retains the affected generic nursery and spawn-backend paths and
|
||
|
|
does not close this race. Keep this fix in PR #481 as its own commit;
|
||
|
|
review bounded post-`CancelAck` reaping separately.
|