🪲 BUG-#19: Fix stale process exit handler breaking provider/model switches - #20
Merged
Conversation
…bering the active one
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Closes #19
reload()(called after switching provider/model, or any settings toggle) kills the oldpycodeloop serveprocess and immediately assigns a newRpcClienttothis.client. The old process'sexitevent fires later, asynchronously — its handler, still registered, wrotethis.client = undefinedunconditionally, clobbering the reference to the already-working new connection and posting a scaryprocessExit("pycodeloop serve exited (code null)") for what was actually just the expected teardown of the replaced process.Symptom: switching provider or model shows a spurious error and the next prompt silently fails until reconnecting manually.
Fix: both
exitandspawnErrorhandlers now checkthis.client === clientbefore acting, so a delayed event from a superseded client can't affect the currently active one.Test plan
npm test(43 passed) /npx tsc --noEmit/npm run lintcleanchat.controller.tsimportsvscodedirectly, same limitation as every other file in this class (untestable undernode:testoutside the Extension Host)