diff --git a/runtime/binding-tls/src/main/java/io/aklivity/zilla/runtime/binding/tls/internal/stream/TlsClientFactory.java b/runtime/binding-tls/src/main/java/io/aklivity/zilla/runtime/binding/tls/internal/stream/TlsClientFactory.java index 449109bbbd..605030d478 100644 --- a/runtime/binding-tls/src/main/java/io/aklivity/zilla/runtime/binding/tls/internal/stream/TlsClientFactory.java +++ b/runtime/binding-tls/src/main/java/io/aklivity/zilla/runtime/binding/tls/internal/stream/TlsClientFactory.java @@ -1529,6 +1529,8 @@ private void onNetEnd( doAppReset(traceId); doEncodeCloseOutbound(traceId, budgetId); doNetEnd(traceId); + + cancelHandshakeTask(); } decoder = decodeIgnoreAll; @@ -1565,6 +1567,8 @@ private void onNetAbort( doAppReset(traceId); doNetAbort(traceId); + + cancelHandshakeTask(); } private void onNetReset( @@ -1589,6 +1593,8 @@ private void onNetReset( doAppAbort(traceId); doNetReset(traceId); + + cancelHandshakeTask(); } private void onNetWindow( @@ -2194,6 +2200,17 @@ private void cleanupEncodeSlot() } } + private void cancelHandshakeTask() + { + assert TlsState.closed(state); + + if (handshakeTaskFutureId != NO_CANCEL_ID) + { + signaler.cancel(handshakeTaskFutureId); + handshakeTaskFutureId = NO_CANCEL_ID; + } + } + private void cancelHandshakeTimeout() { if (handshakeTimeoutFutureId != NO_CANCEL_ID) diff --git a/runtime/binding-tls/src/main/java/io/aklivity/zilla/runtime/binding/tls/internal/stream/TlsServerFactory.java b/runtime/binding-tls/src/main/java/io/aklivity/zilla/runtime/binding/tls/internal/stream/TlsServerFactory.java index bff1991dd0..d681bd499c 100644 --- a/runtime/binding-tls/src/main/java/io/aklivity/zilla/runtime/binding/tls/internal/stream/TlsServerFactory.java +++ b/runtime/binding-tls/src/main/java/io/aklivity/zilla/runtime/binding/tls/internal/stream/TlsServerFactory.java @@ -1233,6 +1233,8 @@ private void onNetEnd( { doEncodeCloseOutbound(traceId, budgetId); doNetEnd(traceId); + + cancelHandshakeTask(); } decoder = decodeIgnoreAll; @@ -1268,6 +1270,8 @@ private void onNetAbort( stream.ifPresent(s -> s.doAppReset(traceId)); doNetAbort(traceId); + + cancelHandshakeTask(); } private void onNetReset( @@ -1292,6 +1296,8 @@ private void onNetReset( stream.ifPresent(s -> s.doAppAbort(traceId)); doNetReset(traceId); + + cancelHandshakeTask(); } private void onNetWindow( @@ -1841,6 +1847,17 @@ private void cleanupEncodeSlot() } } + private void cancelHandshakeTask() + { + assert TlsState.closed(state); + + if (handshakeTaskFutureId != NO_CANCEL_ID) + { + signaler.cancel(handshakeTaskFutureId); + handshakeTaskFutureId = NO_CANCEL_ID; + } + } + private void cancelHandshakeTimeout() { if (handshakeTimeoutFutureId != NO_CANCEL_ID)