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.
We're still seeing crashes due to what look like data races in
DemandBuffer
. Here, I'm making speculative fixes based on what appears to have helped in #3447:In
buffer(value:)
:subscriber.receive(value)
.flush()
after unlocking.In
flush(adding:)
:subscriber.receive(value)
to avoid holding the lock during subscriber calls.demandState.requested
with any additional demand returned by the subscriber.subscriber.receive(completion:)
is called outside the lock.Also add a new
DemandBufferTests
test file. I added some tests that I was hoping would fail without the above changes, but they all pass both before and after, even with ThreadSanitizer enabled.