A session can exit and run onExit (which deletes c.terms[id]) in the gap between subscribe returning exited=false and openTerminal assigning c.terms[id]. The delete is a no-op there since the key isn't set yet, so the later assign resurrects a stale entry for a dead pane, trapping every future open for that id on the connection. Re-apply the delete after the assign when onExit fired in the window, tracked by a c.mu-guarded flag. Add a stress regression test that races the exit against the assign. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com> |
||
|---|---|---|
| .. | ||
| internal | ||
| cdc_wiring.go | ||
| go.mod | ||
| go.sum | ||
| lifecycle_wiring.go | ||
| main.go | ||
| sqlc.yaml | ||
| wiring_test.go | ||