Hi,

The Spring Boot team has pinged me regarding this issue:
https://github.com/spring-projects/spring-boot/issues/29266

I've done some debugging and what it comes down is that when a Connector/Endpoint is paused, we also pause checking the async timeout for requests associated with that Connector/Endpoint.

The code has been like this since it was first implemented some 12 years ago.

I am wondering if this makes sense. I've always thought of "pause" as pausing new incoming connections, disabling keep-alive (i.e. existing connections terminate when the current request completes) and disabling new streams on multiplexed connections but that existing requests would continue.

Is my understanding / expectation of pause (and resume) correct?

Looking at the code there are a few things happening when a connection is paused that don't immediately make sense to me.

Assuming my understanding/expectation is correct then I'm thinking of a patch (or possible patches) along the following lines:

- keep the async timeout task active when the associated
  connector/endpoint is paused

- don't pause sendfile when the associated connector/endpoint is paused

- continue to return recycled objects to caches when the associated
  connector/endpoint is paused

- review use of SocketWrapperBase.getSocket().free() to ensure it is
  called when necessary - for example the embedded case where a
  connector is repeatedly started and stopped. This may be a separate
  patch as it isn't really related to the original issue.

Thoughts?

Mark

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

Reply via email to