protected void validateThreads(ClientProxyMembershipID proxyID) { Set<ServerConnection> serverConnections; synchronized (proxyIdConnections) { ServerConnectionCollection collection = proxyIdConnections.get(proxyID); serverConnections = collection != null ? new HashSet<>(collection.getConnections()) : Collections.emptySet(); } // release sync and operation on copy to fix bug 37675 for (ServerConnection serverConnection : serverConnections) { if (serverConnection.hasBeenTimedOutOnClient()) { logger.warn("{} is being terminated because its client timeout of {} has expired.", new Object[] {serverConnection, Integer.valueOf(serverConnection.getClientReadTimeout())}); try { serverConnection.handleTermination(true); // Not all the code in a ServerConnection correctly // handles interrupt. In particular it is possible to be doing // p2p distribution and to have sent a message to one peer but // to never send it to another due to interrupt. // serverConnection.interruptOwner(); } finally { // Just to be sure we clean it up. // This call probably isn't needed. removeConnection(proxyID, serverConnection); } } } }
this.acceptor.getClientHealthMonitor().removeConnection(this.proxyId, this); if (unregisterClient) { this.acceptor.getClientHealthMonitor().unregisterClient(this.proxyId, getAcceptor(),