grpc-js: Defer actions in http2 stream write callback #2552
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.
nodejs/node#49147 shows that in some rare scenarios, calling
end
in thewrite
callback can put the whole session into a bad state, where the socket is closed but the session is treated as still open. This could cause the symptoms described in #2502. nodejs/node#49147 (comment) indicates that this problem does not occur if the contents of thewrite
callback are enclosed inprocess.nextTick
, so that's what I did here. In casestream.close
in thewrite
callback can cause the same problem, all of the code in the callback is enclosed inprocess.nextTick
. This callback is already always asynchronous with respect to other code, so other than avoiding this bug, this change should have no observable effects to user code.