In two Spring Boot 2.4.4 applications, the session.disconnect() in the gs-messaging-stomp-websocket sample can trigger the exception below on the associated server when run as separate applications:

2021-03-21 12:34:59.943 DEBUG 12622 --- [boundChannel-31] s.w.s.s.t.s.WebSocketServerSockJsSession : Terminating connection after failure to send message to client

java.lang.IllegalStateException: Message will not be sent because the WebSocket session has been closed
    at org.apache.tomcat.websocket.WsRemoteEndpointImplBase.writeMessagePart(WsRemoteEndpointImplBase.java:439) ~[tomcat-embed-websocket-9.0.44.jar:9.0.44]
    at org.apache.tomcat.websocket.WsRemoteEndpointImplBase.sendMessageBlock(WsRemoteEndpointImplBase.java:311) ~[tomcat-embed-websocket-9.0.44.jar:9.0.44]
    at org.apache.tomcat.websocket.WsRemoteEndpointImplBase.sendMessageBlock(WsRemoteEndpointImplBase.java:251) ~[tomcat-embed-websocket-9.0.44.jar:9.0.44]
    at org.apache.tomcat.websocket.WsRemoteEndpointImplBase.sendPartialString(WsRemoteEndpointImplBase.java:224) ~[tomcat-embed-websocket-9.0.44.jar:9.0.44]
    at org.apache.tomcat.websocket.WsRemoteEndpointBasic.sendText(WsRemoteEndpointBasic.java:49) ~[tomcat-embed-websocket-9.0.44.jar:9.0.44]
    at org.springframework.web.socket.adapter.standard.StandardWebSocketSession.sendTextMessage(StandardWebSocketSession.java:215) ~[spring-websocket-5.3.5.jar:5.3.5]
    at org.springframework.web.socket.adapter.AbstractWebSocketSession.sendMessage(AbstractWebSocketSession.java:106) ~[spring-websocket-5.3.5.jar:5.3.5]
    at org.springframework.web.socket.sockjs.transport.session.WebSocketServerSockJsSession.writeFrameInternal(WebSocketServerSockJsSession.java:224) ~[spring-websocket-5.3.5.jar:5.3.5]
    at org.springframework.web.socket.sockjs.transport.session.AbstractSockJsSession.writeFrame(AbstractSockJsSession.java:326) ~[spring-websocket-5.3.5.jar:5.3.5]
    at org.springframework.web.socket.sockjs.transport.session.WebSocketServerSockJsSession.sendMessageInternal(WebSocketServerSockJsSession.java:213) ~[spring-websocket-5.3.5.jar:5.3.5]
    at org.springframework.web.socket.sockjs.transport.session.AbstractSockJsSession.sendMessage(AbstractSockJsSession.java:170) ~[spring-websocket-5.3.5.jar:5.3.5]
    at org.springframework.web.socket.handler.ConcurrentWebSocketSessionDecorator.tryFlushMessageBuffer(ConcurrentWebSocketSessionDecorator.java:190) ~[spring-websocket-5.3.5.jar:5.3.5]
    at org.springframework.web.socket.handler.ConcurrentWebSocketSessionDecorator.sendMessage(ConcurrentWebSocketSessionDecorator.java:163) ~[spring-websocket-5.3.5.jar:5.3.5]
    at org.springframework.web.socket.messaging.StompSubProtocolHandler.sendToClient(StompSubProtocolHandler.java:494) ~[spring-websocket-5.3.5.jar:5.3.5]
    at org.springframework.web.socket.messaging.StompSubProtocolHandler.handleMessageToClient(StompSubProtocolHandler.java:481) ~[spring-websocket-5.3.5.jar:5.3.5]
    at org.springframework.web.socket.messaging.SubProtocolWebSocketHandler.handleMessage(SubProtocolWebSocketHandler.java:366) ~[spring-websocket-5.3.5.jar:5.3.5]
    at org.springframework.messaging.support.ExecutorSubscribableChannel$SendTask.run(ExecutorSubscribableChannel.java:144) ~[spring-messaging-5.3.5.jar:5.3.5]
    at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1130) ~[na:na]
    at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:630) ~[na:na]
    at java.base/java.lang.Thread.run(Thread.java:832) ~[na:na]

2021-03-21 12:34:59.945 DEBUG 12622 --- [boundChannel-31] o.s.w.s.m.StompSubProtocolHandler        : Failed to send WebSocket message to client in session 23326ba4647c4e33b5de83f443398b33

org.springframework.web.socket.sockjs.SockJsTransportFailureException: Failed to write SockJsFrame content='a["ERROR\nmessage:Session closed.\ncontent-length:0\n\n\u0000"]'; nested exception is java.lang.IllegalStateException: Message will not be sent because the WebSocket session has been closed
    at org.springframework.web.socket.sockjs.transport.session.AbstractSockJsSession.writeFrame(AbstractSockJsSession.java:343) ~[spring-websocket-5.3.5.jar:5.3.5]
    at org.springframework.web.socket.sockjs.transport.session.WebSocketServerSockJsSession.sendMessageInternal(WebSocketServerSockJsSession.java:213) ~[spring-websocket-5.3.5.jar:5.3.5]
    at org.springframework.web.socket.sockjs.transport.session.AbstractSockJsSession.sendMessage(AbstractSockJsSession.java:170) ~[spring-websocket-5.3.5.jar:5.3.5]
    at org.springframework.web.socket.handler.ConcurrentWebSocketSessionDecorator.tryFlushMessageBuffer(ConcurrentWebSocketSessionDecorator.java:190) ~[spring-websocket-5.3.5.jar:5.3.5]
    at org.springframework.web.socket.handler.ConcurrentWebSocketSessionDecorator.sendMessage(ConcurrentWebSocketSessionDecorator.java:163) ~[spring-websocket-5.3.5.jar:5.3.5]
    at org.springframework.web.socket.messaging.StompSubProtocolHandler.sendToClient(StompSubProtocolHandler.java:494) ~[spring-websocket-5.3.5.jar:5.3.5]
    at org.springframework.web.socket.messaging.StompSubProtocolHandler.handleMessageToClient(StompSubProtocolHandler.java:481) ~[spring-websocket-5.3.5.jar:5.3.5]
    at org.springframework.web.socket.messaging.SubProtocolWebSocketHandler.handleMessage(SubProtocolWebSocketHandler.java:366) ~[spring-websocket-5.3.5.jar:5.3.5]
    at org.springframework.messaging.support.ExecutorSubscribableChannel$SendTask.run(ExecutorSubscribableChannel.java:144) ~[spring-messaging-5.3.5.jar:5.3.5]
    at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1130) ~[na:na]
    at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:630) ~[na:na]
    at java.base/java.lang.Thread.run(Thread.java:832) ~[na:na]
Caused by: java.lang.IllegalStateException: Message will not be sent because the WebSocket session has been closed
    at org.apache.tomcat.websocket.WsRemoteEndpointImplBase.writeMessagePart(WsRemoteEndpointImplBase.java:439) ~[tomcat-embed-websocket-9.0.44.jar:9.0.44]
    at org.apache.tomcat.websocket.WsRemoteEndpointImplBase.sendMessageBlock(WsRemoteEndpointImplBase.java:311) ~[tomcat-embed-websocket-9.0.44.jar:9.0.44]
    at org.apache.tomcat.websocket.WsRemoteEndpointImplBase.sendMessageBlock(WsRemoteEndpointImplBase.java:251) ~[tomcat-embed-websocket-9.0.44.jar:9.0.44]
    at org.apache.tomcat.websocket.WsRemoteEndpointImplBase.sendPartialString(WsRemoteEndpointImplBase.java:224) ~[tomcat-embed-websocket-9.0.44.jar:9.0.44]
    at org.apache.tomcat.websocket.WsRemoteEndpointBasic.sendText(WsRemoteEndpointBasic.java:49) ~[tomcat-embed-websocket-9.0.44.jar:9.0.44]
    at org.springframework.web.socket.adapter.standard.StandardWebSocketSession.sendTextMessage(StandardWebSocketSession.java:215) ~[spring-websocket-5.3.5.jar:5.3.5]
    at org.springframework.web.socket.adapter.AbstractWebSocketSession.sendMessage(AbstractWebSocketSession.java:106) ~[spring-websocket-5.3.5.jar:5.3.5]
    at org.springframework.web.socket.sockjs.transport.session.WebSocketServerSockJsSession.writeFrameInternal(WebSocketServerSockJsSession.java:224) ~[spring-websocket-5.3.5.jar:5.3.5]
    at org.springframework.web.socket.sockjs.transport.session.AbstractSockJsSession.writeFrame(AbstractSockJsSession.java:326) ~[spring-websocket-5.3.5.jar:5.3.5]
    ... 11 common frames omitted

More often than not, I have to restart the server after a single apparently successful client run. Although this is sample code, the server-side should not become unstable from a quick client disconnect (or any other client action for that matter).

You can reproduce from my repository or from the Spring Guides repository.

Comment From: snicoll

You can reproduce from my repository or from the Spring Guides repository.

Unfortunately, looking at the repository and the description above, I have not found how to reproduce the problem. Can you please clarify the steps to reproduce?

Comment From: spring-projects-issues

If you would like us to look at this issue, please provide the requested information. If the information is not provided within the next 7 days this issue will be closed.

Comment From: spring-projects-issues

Closing due to lack of requested feedback. If you would like us to look at this issue, please provide the requested information and we will re-open the issue.