> Hi, > > Please find here a fix for: > 8262027: Improve how HttpConnection detects a closed channel when > taking/returning a connection to the pool > > While writing a new test to verify that it was possible to handle proxy *and* > server authentication manually when both proxy and server required > authentication, I stumbled on a race condition where the next request after > receiving 407 would manage to retrieve the connection from the pool just > before the connection close was receive from the proxy. Since the test was > using POST, and POST are not retried by default, this caused the test to fail > randomly and intermittently. > > This fix proposes to add a checkOpen() method to HttpConnection, which we can > call just after retrieving a connection from the pool. This method will > attempt to read 1 byte from the channel. Because the connection was in the > pool, it should not have received anything, and because the channel is > non-blocking, the `read` should always return 0, unless the channel has been > closed. This forces an early check on the channel state, rather then waiting > for the selector to wake up the Selector Manager Thread - which might happen > too late. > > This is not a 100% silver bullet, but it drastically reduced the number of > failures I was observing (to 0 after several 100 loops of testing on all > machines). The only other failures I observed was on windows, where > apparently closing the socket on the server side can cause a reset, even when > SO_LINGER and TCP_NODELAY are specified. I solved that by adding a small > delay between socket.shutdownOutput() and socket.close() in the test proxy - > when running on windows.
Daniel Fuchs has updated the pull request with a new target base due to a merge or a rebase. The incremental webrev excludes the unrelated changes brought in by the merge/rebase. The pull request contains six additional commits since the last revision: - Reworked ProxyServer to reuse the connection in case it can detect that there will be no request body - Merge branch 'master' into proxy-server-auth-8262027 - Added blank line - Fixed trailing white spaces - Remove commented code in test - 8262027: Improve how HttpConnection detects a closed channel when taking/returning a connection to the pool ------------- Changes: - all: https://git.openjdk.java.net/jdk/pull/2649/files - new: https://git.openjdk.java.net/jdk/pull/2649/files/c43abe96..d37e7bdb Webrevs: - full: https://webrevs.openjdk.java.net/?repo=jdk&pr=2649&range=04 - incr: https://webrevs.openjdk.java.net/?repo=jdk&pr=2649&range=03-04 Stats: 2007 lines in 70 files changed: 1442 ins; 278 del; 287 mod Patch: https://git.openjdk.java.net/jdk/pull/2649.diff Fetch: git fetch https://git.openjdk.java.net/jdk pull/2649/head:pull/2649 PR: https://git.openjdk.java.net/jdk/pull/2649