mirror of
https://github.com/spring-projects/spring-framework.git
synced 2026-10-01 03:39:05 +00:00
Synchronize request init in AbstractHttpSockJsSession
Although unlikely in practice (but not impossible), the SockJS integration tests write a message while the request is initializing. This change adds synchronization around request intiailization for the SockJS HTTP sesion. This is a backport of: https://github.com/spring-projects/spring-framework/commit/59e02e63c427659e701cc371d210faf1a85c1d42 Issue: SPR-11916
This commit is contained in:
+13
-11
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user