Code Review Request JDK-8146387, Test SSLSession/SessionCacheSizeTests socket accept timed out

Xuelei Fan xuelei.fan at oracle.com
Mon Jan 11 09:09:07 UTC 2016


On 1/11/2016 4:10 PM, Wang Weijun wrote:
> Can you make sure every read to serverPorts is after serverReady = true?
Not actually.  The serverPorts is accessed before the serverReady is true.

> I hope so but cannot confirm it, especially in the constructor (on line
> 342 etc). Or shouldn't you always start the server at port 0 and then
> read it into serverPorts?
Yes. That's the current behavior to use port 0 and than set the used
port into serverPorts.

> You want to start a server on the same port on and on?
> 
Not actually.  Different port are used for different server socket.  The
logic looks like:
   // define four slots for the ports
   int serverPorts[] = new int[]{0, 0, 0, 0};

   // for each slot, create a server socket,
   // and assign the actually used port for each slot.
   for each slots run a thread {
      SSLServerSocket sslServerSocket = ...
      serverPorts[nextPort] = sslServerSocket.getLocalPort();
                  ^^^^^^^^
   }

   // use the actual port for each slot in client side
   if (server ready) {
      connect to the server socket (host:port)
   }

The concurrent access to serverPorts is not the underlying problem.  The
problem is which slot should be assigned the right port value.

Before this fix, the following code is prolematic:

    serverPorts[createdPorts++] = sslServerSocket.getLocalPort();

For example,  two threads access createdPorts, which is 0.
createdPorts++ set createdPorts to 1.  Two server ports are generated,
but only count once.  The serverReady would never set to true:

    if (createdPorts == serverPorts.length) {
        serverReady = true;
    }


This fix is trying to increase the createdPorts value properly.  It is
not actually need to synchronize serverPorts.

Thanks,
Xuelei

> Thanks
> Max
> 
>> On Jan 9, 2016, at 7:06 PM, Xuelei Fan <xuelei.fan at oracle.com> wrote:
>>
>> Hi,
>>
>> Please review a test update for JDK-8146387:
>>
>>   http://cr.openjdk.java.net/~xuelei/8146387/webrev.00/
>>
>> In the test case, javax/net/ssl/SSLSession/SessionCacheSizeTests.java,
>> an integer (createdPorts) is used to count the server sockets.  Every
>> server socket is created in a new thread.  The access and update to
>> createdPorts should be synchronized for multiple threading safe.
>>
>> Thanks,
>> Xuelei
> 




More information about the security-dev mailing list