diff --git a/spring-websocket/src/main/java/org/springframework/web/socket/sockjs/transport/session/AbstractHttpSockJsSession.java b/spring-websocket/src/main/java/org/springframework/web/socket/sockjs/transport/session/AbstractHttpSockJsSession.java index c2b9c9a0e3c..b98fd3d8cca 100644 --- a/spring-websocket/src/main/java/org/springframework/web/socket/sockjs/transport/session/AbstractHttpSockJsSession.java +++ b/spring-websocket/src/main/java/org/springframework/web/socket/sockjs/transport/session/AbstractHttpSockJsSession.java @@ -201,18 +201,20 @@ public abstract class AbstractHttpSockJsSession extends AbstractSockJsSession { this.frameFormat = frameFormat; this.asyncRequestControl = request.getAsyncRequestControl(response); - try { - // Let "our" handler know before sending the open frame to the remote handler - delegateConnectionEstablished(); - writePrelude(request, response); - writeFrame(SockJsFrame.openFrame()); - if (isStreaming() && !isClosed()) { - startAsyncRequest(); + synchronized (this.responseLock) { + try { + // Let "our" handler know before sending the open frame to the remote handler + delegateConnectionEstablished(); + writePrelude(request, response); + writeFrame(SockJsFrame.openFrame()); + if (isStreaming() && !isClosed()) { + startAsyncRequest(); + } + } + catch (Throwable ex) { + tryCloseWithSockJsTransportError(ex, CloseStatus.SERVER_ERROR); + throw new SockJsTransportFailureException("Failed to open session", getId(), ex); } - } - catch (Throwable ex) { - tryCloseWithSockJsTransportError(ex, CloseStatus.SERVER_ERROR); - throw new SockJsTransportFailureException("Failed to open session", getId(), ex); } } @@ -244,8 +246,8 @@ public abstract class AbstractHttpSockJsSession extends AbstractSockJsSession { * @param response the current response * @param frameFormat the transport-specific SocksJS frame format to use */ - public void handleSuccessiveRequest(ServerHttpRequest request, - ServerHttpResponse response, SockJsFrameFormat frameFormat) throws SockJsException { + public void handleSuccessiveRequest(ServerHttpRequest request, ServerHttpResponse response, + SockJsFrameFormat frameFormat) throws SockJsException { synchronized (this.responseLock) { try {