On Wed, 13 Nov 2024 14:57:32 GMT, Daniel Fuchs <dfu...@openjdk.org> wrote:

>> [JDK-8342075](https://bugs.openjdk.org/browse/JDK-8342075) has introduced 
>> more flow controls checks, but also introduced a race condition where 
>> DataFrames for closed streams may fail to be discounted from the connection 
>> window.
>> 
>> The consequence is that WINDOW_UPDATE frames for the connection window may 
>> not be sent when they should, preventing the server from making progress and 
>> stalling the connection.
>> 
>> This can be shown by modifying the StreamFlowControlTest to send less but 
>> bigger frames (e.g. chunks of 1600 bytes instead of chunks of 12 bytes). 
>> With such a modification the test can be seen failing intermittently, when 
>> sameClient=true.
>> 
>> The race happens when frames that have been added to Stream::inputQ fail to 
>> be drained after the stream is closed (or continue to be added to the inputQ 
>> after the stream is closed).
>> 
>> The fix ensures that Stream::drainInputQueue() is called when the stream is 
>> closed, and that no further data farme will be added to the inputQ after the 
>> stream is marked closed.
>> 
>> The modified StreamFlowControlTest could be observed failing relatively 
>> frequently on linux-aarch64 without the fix.
>> With the fix the test no longer fails.
>
> Daniel Fuchs has updated the pull request incrementally with one additional 
> commit since the last revision:
> 
>   Integrated review feedback

Thank you for the updates, Daniel. This looks good to me.

-------------

Marked as reviewed by jpai (Reviewer).

PR Review: https://git.openjdk.org/jdk/pull/21991#pullrequestreview-2433632686

Reply via email to