Fix memqueue race condition during shutdown #43874
Open
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 memory queue had a bug where if
Close
was called on an already-empty queue, it would mark itself as closing but never cancel the final internal context. The main effect was thatGet
requests to such a queue would still block instead of correctly returningio.EOF
immediately. This caused some test flakiness, e.g.TestClient/no_infinite_loop_when_processing_fails
depended on theio.EOF
return value to end the test, but whetherClose
was called before or after draining the queue depended on goroutine execution order. This PR moves the context cancellation check to the end of the run loop iteration, so it's updated after every state change and not just after event deletions. The accompanying unit test fails without this change.Checklist
I have made corresponding changes to the documentationI have made corresponding change to the default configuration filesI have added an entry inCHANGELOG.next.asciidoc
orCHANGELOG-developer.next.asciidoc
.