From 299be08268b8f93fd19c274b8937302fe86198ac Mon Sep 17 00:00:00 2001 From: Rossen Stoyanchev Date: Fri, 21 Mar 2014 11:42:23 -0400 Subject: [PATCH] Remove synchronized block around WebSocketSession.send Since we now wrap the WebSocketSession with a concurrent decorator, the synchronized keyword around message sending needed to be removed. Issue: SPR-11586 --- .../socket/handler/ConcurrentWebSocketSessionDecorator.java | 5 +++++ .../web/socket/messaging/StompSubProtocolHandler.java | 6 ++---- .../transport/session/WebSocketServerSockJsSession.java | 2 +- 3 files changed, 8 insertions(+), 5 deletions(-) diff --git a/spring-websocket/src/main/java/org/springframework/web/socket/handler/ConcurrentWebSocketSessionDecorator.java b/spring-websocket/src/main/java/org/springframework/web/socket/handler/ConcurrentWebSocketSessionDecorator.java index ce70fad270a..0f989b1a44b 100644 --- a/spring-websocket/src/main/java/org/springframework/web/socket/handler/ConcurrentWebSocketSessionDecorator.java +++ b/spring-websocket/src/main/java/org/springframework/web/socket/handler/ConcurrentWebSocketSessionDecorator.java @@ -118,6 +118,11 @@ public class ConcurrentWebSocketSessionDecorator extends WebSocketSessionDecorat } private void checkSessionLimits() throws IOException { + if (logger.isDebugEnabled()) { + logger.debug("Another send already in progress, session id '" + getId() + "'" + + ", in-progress send time " + getInProgressSendTime() + " (ms), " + + ", buffer size " + this.bufferSize + " bytes"); + } if (getInProgressSendTime() > this.sendTimeLimit) { logError("A message could not be sent due to a timeout"); getDelegate().close(); diff --git a/spring-websocket/src/main/java/org/springframework/web/socket/messaging/StompSubProtocolHandler.java b/spring-websocket/src/main/java/org/springframework/web/socket/messaging/StompSubProtocolHandler.java index 6bc65fdd6f4..7811b8f6912 100644 --- a/spring-websocket/src/main/java/org/springframework/web/socket/messaging/StompSubProtocolHandler.java +++ b/spring-websocket/src/main/java/org/springframework/web/socket/messaging/StompSubProtocolHandler.java @@ -198,11 +198,9 @@ public class StompSubProtocolHandler implements SubProtocolHandler { try { message = MessageBuilder.withPayload(message.getPayload()).setHeaders(headers).build(); byte[] bytes = this.stompEncoder.encode((Message) message); + TextMessage textMessage = new TextMessage(bytes); - synchronized(session) { - session.sendMessage(new TextMessage(bytes)); - } - + session.sendMessage(textMessage); } catch (Throwable ex) { sendErrorMessage(session, ex); diff --git a/spring-websocket/src/main/java/org/springframework/web/socket/sockjs/transport/session/WebSocketServerSockJsSession.java b/spring-websocket/src/main/java/org/springframework/web/socket/sockjs/transport/session/WebSocketServerSockJsSession.java index 6a7b5610ed3..983785412ec 100644 --- a/spring-websocket/src/main/java/org/springframework/web/socket/sockjs/transport/session/WebSocketServerSockJsSession.java +++ b/spring-websocket/src/main/java/org/springframework/web/socket/sockjs/transport/session/WebSocketServerSockJsSession.java @@ -174,7 +174,7 @@ public class WebSocketServerSockJsSession extends AbstractSockJsSession implemen @Override protected void disconnect(CloseStatus status) throws IOException { - if (this.webSocketSession != null) { + if (isActive()) { this.webSocketSession.close(status); } }