On Fri, 3 Feb 2023 17:58:28 GMT, Darragh Clarke <[email protected]> wrote:

> Currently there is a race condition that can allow for too many 
> 'idleConnections' in `ServerImpl`
> 
> This PR adds a lock to make sure only one connection can be marked Idle at a 
> time as well as a test that consistently failed before the change but which 
> now passes.

src/jdk.httpserver/share/classes/sun/net/httpserver/ServerImpl.java line 966:

> 964: 
> 965:     void markIdle(HttpConnection c) {
> 966:         Boolean close = false;

I did not go deep but i am not sure removing the connections is right thing to 
do in "markIdle". i see  test is failing if i increase the totalConnections = 
maxIdleConnections + 5;.

----------System.out:(39/2387)----------
Server started at address /[127.0.0.1:38135](http://127.0.0.1:38135/)
Issuing request http://127.0.0.1:38135/MaxIdleConnectionTest/1
Issuing request http://127.0.0.1:38135/MaxIdleConnectionTest/2
Issuing request http://127.0.0.1:38135/MaxIdleConnectionTest/3
Issuing request http://127.0.0.1:38135/MaxIdleConnectionTest/4
Issuing request http://127.0.0.1:38135/MaxIdleConnectionTest/6
Issuing request http://127.0.0.1:38135/MaxIdleConnectionTest/5
Issuing request http://127.0.0.1:38135/MaxIdleConnectionTest/8
Issuing request http://127.0.0.1:38135/MaxIdleConnectionTest/7
Issuing request http://127.0.0.1:38135/MaxIdleConnectionTest/9
Waiting for all 9 requests to reach the server side request handler
Request /MaxIdleConnectionTest/2 received; handler will wait on latch
Request /MaxIdleConnectionTest/1 received; handler will wait on latch
Request /MaxIdleConnectionTest/3 received; handler will wait on latch
Request /MaxIdleConnectionTest/7 received; handler will wait on latch
Request /MaxIdleConnectionTest/6 received; handler will wait on latch
Request /MaxIdleConnectionTest/8 received; handler will wait on latch
Request /MaxIdleConnectionTest/9 received; handler will wait on latch
Request /MaxIdleConnectionTest/5 received; handler will wait on latch
Sending response for request /MaxIdleConnectionTest/1 from 
/[127.0.0.1:59710](http://127.0.0.1:59710/)
Request /MaxIdleConnectionTest/4 received; handler will wait on latch
Sending response for request /MaxIdleConnectionTest/2 from 
/[127.0.0.1:59724](http://127.0.0.1:59724/)
Sending response for request /MaxIdleConnectionTest/4 from 
/[127.0.0.1:59734](http://127.0.0.1:59734/)
Sending response for request /MaxIdleConnectionTest/6 from 
/[127.0.0.1:59712](http://127.0.0.1:59712/)
Sending response for request /MaxIdleConnectionTest/5 from 
/[127.0.0.1:59748](http://127.0.0.1:59748/)
Sending response for request /MaxIdleConnectionTest/8 from 
/[127.0.0.1:59766](http://127.0.0.1:59766/)
Sending response for request /MaxIdleConnectionTest/3 from 
/[127.0.0.1:59760](http://127.0.0.1:59760/)
Sending response for request /MaxIdleConnectionTest/7 from 
/[127.0.0.1:59774](http://127.0.0.1:59774/)
Sending response for request /MaxIdleConnectionTest/9 from 
/[127.0.0.1:59752](http://127.0.0.1:59752/)
Received successful response for request 0
Received successful response for request 1
Received successful response for request 2
Received successful response for request 3
Received successful response for request 4
Received successful response for request 5
Received successful response for request 6
Received successful response for request 7
Received successful response for request 8
count 2

Note: Modified and original both test passes on jdk without your fix.

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

PR: https://git.openjdk.org/jdk/pull/12413

Reply via email to