Skip to content

AbstractWebSocketSession.sendMessage race condition [SPR-14138] #18710

@spring-projects-issues

Description

@spring-projects-issues

Karsten Sperling opened SPR-14138 and commented

AbstractWebSocketSession.sendMessage() checks if the connection is still open via isOpen() and throws an IllegalArgumentException if not. However this does not guarantee that the connection will still be open by the time the underlying WS implementation actually tries to write. This means the caller still has to catch / handle the relevant IOException anyway.

It is also impossible for the caller to avoid this exception as the remote side can close the connection at any time, so calling isOpen() before sendMessage() would suffer from exactly the same problem. The correct approach for this kind of situation is to simply attempt the IO operation and to let it fail naturally with an IOException in the underlying implementation if the connection has in fact been closed.

So I suggest to completely remove the Assert.isTrue(isOpen(), ...); check.


Affects: 4.2.5, 4.3 RC1

Referenced from: commits e67a274, aafd46a

Metadata

Metadata

Assignees

Labels

in: webIssues in web modules (web, webmvc, webflux, websocket)type: bugA general bug

Type

No type

Projects

No projects

Milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions