Ensure connection is closed when raw SSE stream raises#248
Open
jsxs0 wants to merge 1 commit intorage-rb:mainfrom
Open
Ensure connection is closed when raw SSE stream raises#248jsxs0 wants to merge 1 commit intorage-rb:mainfrom
jsxs0 wants to merge 1 commit intorage-rb:mainfrom
Conversation
Add an `ensure` block to `start_raw_stream` so the connection is always closed if the user's Proc raises an exception without calling `close`. This matches the cleanup behavior already present in `start_formatted_stream`, which has `ensure connection.close`. Without this fix, a Proc that raises before closing leaves the Iodine connection open until socket timeout.
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.
Summary
Add an
ensureblock toSSE::Application#start_raw_streamso the Iodine connection is always closed if the user's Proc raises an exception without callingclose.Problem
start_formatted_stream(Enumerator path) hasensure connection.close— the connection always cleans up, even on exception.start_raw_stream(Proc path) does not — if the Proc raises before callingconnection.close, the connection leaks until Iodine's socket timeout.Fix
The
connection.open?guard avoids double-closing when the Proc already calledclose.Test plan
spec/sse/application_spec.rbwith 3 test cases:bundle exec rspec spec/sse/— 47 examples, 0 failures