THRIFT-5869: Close the transport after TServerEventHandler deleteContext
diff --git a/lib/java/src/main/java/org/apache/thrift/server/AbstractNonblockingServer.java b/lib/java/src/main/java/org/apache/thrift/server/AbstractNonblockingServer.java
index af2bc63..310bb78 100644
--- a/lib/java/src/main/java/org/apache/thrift/server/AbstractNonblockingServer.java
+++ b/lib/java/src/main/java/org/apache/thrift/server/AbstractNonblockingServer.java
@@ -477,9 +477,12 @@
           || state_ == FrameBufferState.AWAITING_CLOSE) {
         readBufferBytesAllocated.addAndGet(-buffer_.array().length);
       }
-      trans_.close();
-      if (eventHandler_ != null) {
-        eventHandler_.deleteContext(context_, inProt_, outProt_);
+      try {
+        if (eventHandler_ != null) {
+          eventHandler_.deleteContext(context_, inProt_, outProt_);
+        }
+      } finally {
+        trans_.close();
       }
     }
 
diff --git a/lib/java/src/main/java/org/apache/thrift/transport/sasl/NonblockingSaslHandler.java b/lib/java/src/main/java/org/apache/thrift/transport/sasl/NonblockingSaslHandler.java
index 66a1e5f..930f8e8 100644
--- a/lib/java/src/main/java/org/apache/thrift/transport/sasl/NonblockingSaslHandler.java
+++ b/lib/java/src/main/java/org/apache/thrift/transport/sasl/NonblockingSaslHandler.java
@@ -416,20 +416,23 @@
    * selector.
    */
   public void close() {
-    underlyingTransport.close();
-    selectionKey.cancel();
-    if (saslPeer != null) {
-      saslPeer.dispose();
+    try {
+      if (serverContextCreated) {
+        eventHandler.deleteContext(
+            serverContext,
+            inputProtocolFactory.getProtocol(underlyingTransport),
+            outputProtocolFactory.getProtocol(underlyingTransport));
+      }
+    } finally {
+      selectionKey.cancel();
+      if (saslPeer != null) {
+        saslPeer.dispose();
+      }
+      nextPhase = Phase.CLOSED;
+      currentPhase = Phase.CLOSED;
+      underlyingTransport.close();
+      LOGGER.trace("Connection closed: {}", underlyingTransport);
     }
-    if (serverContextCreated) {
-      eventHandler.deleteContext(
-          serverContext,
-          inputProtocolFactory.getProtocol(underlyingTransport),
-          outputProtocolFactory.getProtocol(underlyingTransport));
-    }
-    nextPhase = Phase.CLOSED;
-    currentPhase = Phase.CLOSED;
-    LOGGER.trace("Connection closed: {}", underlyingTransport);
   }
 
   public enum Phase {