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> |
||
|---|---|---|
| .. | ||
| adapters | ||
| cdc | ||
| config | ||
| domain | ||
| httpd | ||
| lifecycle | ||
| observe/reaper | ||
| ports | ||
| project | ||
| runfile | ||
| session | ||
| storage/sqlite | ||
| terminal | ||