RFR [9] 8180155: WebSocket secure connection get stuck after onOpen

Pavel Rappo pavel.rappo at oracle.com
Thu Jun 1 13:48:42 UTC 2017


> On 1 Jun 2017, at 13:45, Daniel Fuchs <daniel.fuchs at oracle.com> wrote:
> 
> Hi Pavel,
> 
> I agree it would be good to have a test :-(
> These kind of complex state logic have a tendency to
> bite you if you only test them by code reading.

True. The thing is I would refrain from writing a black-box test in this case.
The reason is that it would be very non-obvious. I think we can get away with
descending to a appropriate level of abstraction and test Receiver directly as
if it was the target system. I will have to provide a suitable implementation of
RawChannel which would allow us to mimic different corner cases though.

>> I tried to rewrite the state machine the way that both fixes this bug and makes
>> the code easier to follow (I'm biased here obviously).
> 
> Can we throw an InternalError or assert if
> 124                         reader.readFrame(data, frameConsumer);
> does not advance the buffer position?

Makes sense. Done in place.

> 131                 break;
> hmmm... what if demand.get() is no longer 0 when we reach this line?

That would be fine, Daniel.

> what if the cooperative handler already thinks that the current thread
> will read the data? Is that possible?

CooperativeHandler does not care about what it executes. It simply makes sure
that for each call to `handle`, there will be a subsequent execution. If we go
one level up, then we will see there's a enclosing (hidden) `while` that
actually calls `pushContinuously`. So no harm here.

The `while` loop in `pushContinuously` exists _mainly_ to make sure we
eventually exhaust either data or demand. Whichever comes first.

Does it make any sense?



More information about the net-dev mailing list