Make reading via TCPConnection re-entrant safe #3175
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.
Port over bc6f78bcaad55156393753c540befe9f581065bc from wallaroo.
There's a nasty possible bug in TCPConnection before
applying this change.
Because
_mute
and_unmute
are synchronous methods onTCPConnection and because they can be called inside
_pending_reads
via code executing innotify.received
, itspossible to mute and unmute a source while executing
_pending_reads
.Prior to this change, if you were to unmute from inside a pending
reads via the above scenario,
_unmute
would synchronously call_pending_reads
to re-enter that function and start processingdata out of order. Further, we could end up in an infinite loop
so long as enough data existed.