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());
}
}