fix: SSE handler blocking #5181
Merged
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.
#5182
#5155
#5094
close(client)call is placed in the top-levelhttp.HandlerFunc'sdefer, which means the channel is only closed when the entire HTTP request handler returns.l.{{.Call}}) runs in a separatethreading.GoSafeCtxgoroutine. When this goroutine finishes sending all events, theclientchannel remains open becauseclose(client)is not executed within its scope.forloop, which reads from theclientchannel, will then block indefinitely oncase data := <-client:because it never receives a "closed" signal, even though no more events will be sent.case data := <-client:lacks anokcheck, which is a standard Go practice to detect if a channel has been closed, preventing unnecessary processing of zero values.This results in:
forloop goroutine remains active indefinitely, consuming resources, even after all events have been sent.