Keep the worker serving after a handler raises - #13
Merged
Merged
Conversation
A handler exception permanently killed the worker. jsonrpc_handler passed the exception object as JSON-RPC `data`, which ujson cannot serialize, so building the error response raised TypeError out of dispatch(); the serve loop caught it and broke out, closing the client. The process stayed resident but never read stdin again, so every later request on that worker timed out in the shim's RPC send. Pass only the exception message, and split the serve loop so a failed dispatch no longer ends the session. Read and write failures still stop serving, since a partial frame leaves no safe point to resume from. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
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.
A handler exception permanently killed the worker. jsonrpc_handler passed the exception object as JSON-RPC
data, which ujson cannot serialize, so building the error response raised TypeError out of dispatch(); the serve loop caught it and broke out, closing the client. The process stayed resident but never read stdin again, so every later request on that worker timed out in the shim's RPC send.Pass only the exception message, and split the serve loop so a failed dispatch no longer ends the session. Read and write failures still stop serving, since a partial frame leaves no safe point to resume from.