On 04/12/2019 10:25, Rémy Maucherat wrote:
> On Wed, Dec 4, 2019 at 11:11 AM Mark Thomas <m...@homeinbox.net
> <mailto:m...@homeinbox.net>> wrote:
> 
>     On 04/12/2019 09:58, Mark Thomas wrote:
>     > On 04/12/2019 09:27, Mark Thomas wrote:
>     >> On 04/12/2019 07:55, Rémy Maucherat wrote:
>     >
>     > <snip/>
>     >
>     >>> Blocking is also used for HTTP/2 where it seems to work. If the
>     write
>     >>> buffer is full, 0 bytes are written and the socket is indeed
>     passed to
>     >>> the poller but until the operation is complete it is supposed to be
>     >>> blocked here:
>     >>>
>     
> https://github.com/apache/tomcat/blob/master/java/org/apache/tomcat/util/net/SocketWrapperBase.java#L1430
>     >>
>     >> That helps a lot. I can try and see why things aren't blocking there.
>     >
>     > Some progress. The thread does wait there but it is getting
>     released too
>     > early. I'm guessing something is calling notify(). I'm planning to add
>     > more debug to figure out what / why.
> 
>     Found it.
> 
>     The wait on line 1430 (see link above) waits for the write/read timeout.
>     The problem was that this wait was timing out, allowing the code to
>     continue before the Poller timed out a few milliseconds later and called
>     the CompletionHander which ultimately sets the SendResult the WebSocket
>     code is looking for.
> 
>     I'm currently testing using:
> 
>     state.wait()
> 
>     rather than
> 
>     state.wait(unit.toMillis(timeout));
> 
> 
> Well, it would remove the enforcement of the overall timeout since the
> write could be made up of multiple operations. But I think I get the
> idea that it's imperfect (once the IO is running, you cannot stop it
> this way).

Could we record the start time of the write (or similar) and adjust the
timeout passed the Poller accordingly?

Mark

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org
For additional commands, e-mail: dev-h...@tomcat.apache.org

Reply via email to