On Fri, 10 Jan 2025 14:47:02 GMT, Jaikiran Pai <j...@openjdk.org> wrote:
>> The HTTP/2 flow control logic has a potential race condition where some of >> the unprocessed data may be counted twice for the connection window. >> A protocol exception may be raised incorrectly if there are several >> concurrent streams producing data and the connection window is close from >> being exhausted. > > src/java.net.http/share/classes/jdk/internal/net/http/WindowUpdateSender.java > line 135: > >> 133: private boolean checkWindowSizeExceeded(long received, long len) { >> 134: // because windowSize is bound by Integer.MAX_VALUE >> 135: // we will never reach the point where received.get() + len > > Nit - the method param `received` shadows the class level field and the > comment that says "received.get()" would need to be reworded too. It might be > better to rename the method param to something else. I guess I could rename it to `processed`. > src/java.net.http/share/classes/jdk/internal/net/http/WindowUpdateSender.java > line 206: > >> 204: int tosend = (int)Math.min(received.get(), >> Integer.MAX_VALUE); >> 205: if (tosend > limit) { >> 206: received.addAndGet(-tosend); > > I'm guessing the change on this line is to merely be consistent with some > others parts of the code in this class? Semantically, both these methods > would be the same since we don't use the return value. yes - I had added some println when debugging for which it was more convenient to call addAndGet than getAndAdd. As you say it's the same so I left it. ------------- PR Review Comment: https://git.openjdk.org/jdk/pull/23018#discussion_r1910497286 PR Review Comment: https://git.openjdk.org/jdk/pull/23018#discussion_r1910497406