Bug fix: fixed broken result callback in ProtocolNegotiatorBase
diff --git a/httpcore5-h2/src/main/java/org/apache/hc/core5/http2/impl/nio/ProtocolNegotiatorBase.java b/httpcore5-h2/src/main/java/org/apache/hc/core5/http2/impl/nio/ProtocolNegotiatorBase.java
index 20ef57e..d3803b6 100644
--- a/httpcore5-h2/src/main/java/org/apache/hc/core5/http2/impl/nio/ProtocolNegotiatorBase.java
+++ b/httpcore5-h2/src/main/java/org/apache/hc/core5/http2/impl/nio/ProtocolNegotiatorBase.java
@@ -72,7 +72,7 @@
         if (data != null && data.hasRemaining()) {
             protocolHandler.inputReady(ioSession, data);
         }
-        if (completed.compareAndSet(true, false)) {
+        if (completed.compareAndSet(false, true) && resultCallback != null) {
             resultCallback.completed(ioSession);
         }
     }
@@ -93,7 +93,7 @@
                 CommandSupport.failCommands(session, cause);
             }
         } catch (final Exception ex) {
-            if (completed.compareAndSet(true, false)) {
+            if (completed.compareAndSet(false, true) && resultCallback != null) {
                 resultCallback.failed(ex);
             }
         }
@@ -109,7 +109,7 @@
                 CommandSupport.cancelCommands(session);
             }
         } finally {
-            if (completed.compareAndSet(true, false)) {
+            if (completed.compareAndSet(false, true) && resultCallback != null) {
                 resultCallback.failed(new ConnectionClosedException());
             }
         }