mirror of
https://github.com/spring-projects/spring-framework.git
synced 2026-09-17 16:30:28 +00:00
Remove closeLock from ConcurrentWebSocketSessionDecorator#checkSessionLimits
Closes gh-36909
This commit is contained in:
+30
-35
@@ -208,42 +208,37 @@ public class ConcurrentWebSocketSessionDecorator extends WebSocketSessionDecorat
|
||||
}
|
||||
|
||||
private void checkSessionLimits() {
|
||||
if (!shouldNotSend() && this.closeLock.tryLock()) {
|
||||
try {
|
||||
if (getTimeSinceSendStarted() > getSendTimeLimit()) {
|
||||
String format = "Send time %d (ms) for session '%s' exceeded the allowed limit %d";
|
||||
String reason = String.format(format, getTimeSinceSendStarted(), getId(), getSendTimeLimit());
|
||||
limitExceeded(reason);
|
||||
}
|
||||
else if (getBufferSize() > getBufferSizeLimit()) {
|
||||
switch (this.overflowStrategy) {
|
||||
case TERMINATE -> {
|
||||
String format = "Buffer size %d bytes for session '%s' exceeds the allowed limit %d";
|
||||
String reason = String.format(format, getBufferSize(), getId(), getBufferSizeLimit());
|
||||
limitExceeded(reason);
|
||||
}
|
||||
case DROP -> {
|
||||
int i = 0;
|
||||
while (getBufferSize() > getBufferSizeLimit()) {
|
||||
WebSocketMessage<?> message = this.buffer.poll();
|
||||
if (message == null) {
|
||||
break;
|
||||
}
|
||||
this.bufferSize.addAndGet(-message.getPayloadLength());
|
||||
i++;
|
||||
}
|
||||
if (logger.isDebugEnabled()) {
|
||||
logger.debug("Dropped " + i + " messages, buffer size: " + getBufferSize());
|
||||
}
|
||||
}
|
||||
default ->
|
||||
// Should never happen..
|
||||
throw new IllegalStateException("Unexpected OverflowStrategy: " + this.overflowStrategy);
|
||||
}
|
||||
}
|
||||
if (!shouldNotSend()) {
|
||||
if (getTimeSinceSendStarted() > getSendTimeLimit()) {
|
||||
String format = "Send time %d (ms) for session '%s' exceeded the allowed limit %d";
|
||||
String reason = String.format(format, getTimeSinceSendStarted(), getId(), getSendTimeLimit());
|
||||
limitExceeded(reason);
|
||||
}
|
||||
finally {
|
||||
this.closeLock.unlock();
|
||||
else if (getBufferSize() > getBufferSizeLimit()) {
|
||||
switch (this.overflowStrategy) {
|
||||
case TERMINATE -> {
|
||||
String format = "Buffer size %d bytes for session '%s' exceeds the allowed limit %d";
|
||||
String reason = String.format(format, getBufferSize(), getId(), getBufferSizeLimit());
|
||||
limitExceeded(reason);
|
||||
}
|
||||
case DROP -> {
|
||||
int i = 0;
|
||||
while (getBufferSize() > getBufferSizeLimit()) {
|
||||
WebSocketMessage<?> message = this.buffer.poll();
|
||||
if (message == null) {
|
||||
break;
|
||||
}
|
||||
this.bufferSize.addAndGet(-message.getPayloadLength());
|
||||
i++;
|
||||
}
|
||||
if (logger.isDebugEnabled()) {
|
||||
logger.debug("Dropped " + i + " messages, buffer size: " + getBufferSize());
|
||||
}
|
||||
}
|
||||
default ->
|
||||
// Should never happen..
|
||||
throw new IllegalStateException("Unexpected OverflowStrategy: " + this.overflowStrategy);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user