diff --git a/java/org/apache/tomcat/websocket/server/WsHttpUpgradeHandler.java b/java/org/apache/tomcat/websocket/server/WsHttpUpgradeHandler.java
index eebbdcad248d..b49858ccdc1c 100644
--- a/java/org/apache/tomcat/websocket/server/WsHttpUpgradeHandler.java
+++ b/java/org/apache/tomcat/websocket/server/WsHttpUpgradeHandler.java
@@ -100,6 +100,7 @@ public void preInit(ServerEndpointConfig serverEndpointConfig,
@Override
public void init(WebConnection connection) {
+ this.connection = connection;
if (serverEndpointConfig == null) {
throw new IllegalStateException(
sm.getString("wsHttpUpgradeHandler.noPreInit"));
@@ -212,7 +213,9 @@ public void pause() {
@Override
public void destroy() {
+ WebConnection connection = this.connection;
if (connection != null) {
+ this.connection = null;
try {
connection.close();
} catch (Exception e) {
diff --git a/webapps/docs/changelog.xml b/webapps/docs/changelog.xml
index de2eb5699c1d..a8dc92f73fb7 100644
--- a/webapps/docs/changelog.xml
+++ b/webapps/docs/changelog.xml
@@ -160,6 +160,14 @@
+
+
+
+ The internal upgrade handler should close the associated
+ WebConnection
on destroy. (remm)
+
+
+