This is an automated email from the ASF dual-hosted git repository.
markt pushed a commit to branch 10.0.x
in repository https://gitbox.apache.org/repos/asf/tomcat.git
The following commit(s) were added to refs/heads/10.0.x by this push:
new acebbe0 Stop sendfile before closing sockets
acebbe0 is described below
commit acebbe073fb31bdd496940b8f9b3ef90dc68bf10
Author: Mark Thomas <[email protected]>
AuthorDate: Tue Nov 23 19:10:09 2021 +0000
Stop sendfile before closing sockets
---
java/org/apache/tomcat/util/net/AprEndpoint.java | 55 ++++++++++++------------
1 file changed, 28 insertions(+), 27 deletions(-)
diff --git a/java/org/apache/tomcat/util/net/AprEndpoint.java
b/java/org/apache/tomcat/util/net/AprEndpoint.java
index 578a571..04651a3 100644
--- a/java/org/apache/tomcat/util/net/AprEndpoint.java
+++ b/java/org/apache/tomcat/util/net/AprEndpoint.java
@@ -580,6 +580,34 @@ public class AprEndpoint extends
AbstractEndpoint<Long,Long> implements SNICallB
// Ignore
}
+ if (getUseSendfile()) {
+ try {
+ sendfile.stop();
+
+ // Wait for the sendfile thread to exit, otherwise parallel
+ // destruction of sockets which are still in the poller
can cause
+ // problems.
+ waitMillis = 0;
+ try {
+ while (sendfile.sendfileThread.isAlive() && waitMillis
< 10000) {
+ waitMillis++;
+ Thread.sleep(1);
+ }
+ } catch (InterruptedException e) {
+ // Ignore
+ }
+
+ if (sendfile.sendfileThread.isAlive()) {
+ log.warn(sm.getString("endpoint.sendfileThreadStop"));
+ }
+
+ sendfile.destroy();
+ } catch (Exception e) {
+ // Ignore
+ }
+ sendfile = null;
+ }
+
// Close the SocketWrapper for each open connection - this should
// trigger a IOException when the app (or container) tries to
write.
// Use the blocking status write lock as a proxy for a lock on
@@ -609,33 +637,6 @@ public class AprEndpoint extends
AbstractEndpoint<Long,Long> implements SNICallB
}
poller = null;
connections.clear();
- if (getUseSendfile()) {
- try {
- sendfile.stop();
-
- // Wait for the sendfile thread to exit, otherwise parallel
- // destruction of sockets which are still in the poller
can cause
- // problems.
- waitMillis = 0;
- try {
- while (sendfile.sendfileThread.isAlive() && waitMillis
< 10000) {
- waitMillis++;
- Thread.sleep(1);
- }
- } catch (InterruptedException e) {
- // Ignore
- }
-
- if (sendfile.sendfileThread.isAlive()) {
- log.warn(sm.getString("endpoint.sendfileThreadStop"));
- }
-
- sendfile.destroy();
- } catch (Exception e) {
- // Ignore
- }
- sendfile = null;
- }
if (processorCache != null) {
processorCache.clear();
processorCache = null;
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]