diff --git a/src/main/java/org/jboss/remoting3/remote/HttpUpgradeConnectionProvider.java b/src/main/java/org/jboss/remoting3/remote/HttpUpgradeConnectionProvider.java index eff73da1..e0000fcf 100644 --- a/src/main/java/org/jboss/remoting3/remote/HttpUpgradeConnectionProvider.java +++ b/src/main/java/org/jboss/remoting3/remote/HttpUpgradeConnectionProvider.java @@ -266,6 +266,7 @@ public void accept(final StreamConnection channel) { final RemoteConnection connection = new RemoteConnection(channel, sslChannel, optionMap, HttpUpgradeConnectionProvider.this); final ServerConnectionOpenListener openListener = new ServerConnectionOpenListener(connection, getConnectionProviderContext(), saslAuthenticationFactory, optionMap); channel.getSinkChannel().setWriteListener(connection.getWriteListener()); + channel.getSinkChannel().setCloseListener(c -> connection.getWriteListener().shutdownWrites()); conn.tracef("Accepted connection from %s to %s", channel.getPeerAddress(), channel.getLocalAddress()); openListener.handleEvent(channel.getSourceChannel()); } diff --git a/src/main/java/org/jboss/remoting3/remote/RemoteConnection.java b/src/main/java/org/jboss/remoting3/remote/RemoteConnection.java index 5100231b..25df7318 100644 --- a/src/main/java/org/jboss/remoting3/remote/RemoteConnection.java +++ b/src/main/java/org/jboss/remoting3/remote/RemoteConnection.java @@ -274,6 +274,10 @@ final class RemoteWriteListener implements ChannelListener pooled; final Queue> queue = this.queue; try { diff --git a/src/main/java/org/jboss/remoting3/remote/RemoteConnectionProvider.java b/src/main/java/org/jboss/remoting3/remote/RemoteConnectionProvider.java index 4ef7925c..1bd491ce 100644 --- a/src/main/java/org/jboss/remoting3/remote/RemoteConnectionProvider.java +++ b/src/main/java/org/jboss/remoting3/remote/RemoteConnectionProvider.java @@ -197,6 +197,7 @@ public Cancellable cancel() { if (connection.isOpen()) { remoteConnection.setResult(cancellableResult); connection.getSinkChannel().setWriteListener(remoteConnection.getWriteListener()); + connection.getSinkChannel().setCloseListener(channel -> remoteConnection.getWriteListener().shutdownWrites()); final ClientConnectionOpenListener openListener = new ClientConnectionOpenListener(destination, remoteConnection, connectionProviderContext, authenticationConfiguration, saslClientFactoryOperator, serverMechs, connectOptions); openListener.handleEvent(connection.getSourceChannel()); } @@ -414,6 +415,7 @@ private void handleAccepted(final StreamConnection accepted, final SslChannel ss final RemoteConnection connection = new RemoteConnection(accepted, sslChannel, serverOptionMap, RemoteConnectionProvider.this); final ServerConnectionOpenListener openListener = new ServerConnectionOpenListener(connection, connectionProviderContext, saslAuthenticationFactory, serverOptionMap); accepted.getSinkChannel().setWriteListener(connection.getWriteListener()); + accepted.getSinkChannel().setCloseListener(channel -> connection.getWriteListener().shutdownWrites()); log.tracef("Accepted connection from %s to %s", connection.getPeerAddress(), connection.getLocalAddress()); openListener.handleEvent(accepted.getSourceChannel()); }