Fix race condition in SSE GET request initialization #1212
Merged
+6
−5
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.
The StreamableHttpHandler was flushing HTTP response headers before calling HandleGetRequestAsync, which sets _getHttpRequestStarted = true. This allowed a race where SendNotificationAsync could be called after the client received headers but before _getHttpRequestStarted was set, causing the notification to be silently dropped.
Move the flush inside HandleGetRequestAsync so it occurs after _getHttpRequestStarted is set, while still holding the lock. This ensures SendNotificationAsync will either:
The priming write path already flushes via SseEventWriter.WriteAsync, so the explicit flush is only needed in the non-priming case.
Fixes #1211 (hopefully)