remove synchronized locks that may be held while blocking

This commit is contained in:
ravi-signal
2024-01-31 14:29:15 -06:00
committed by GitHub
parent b483159b3a
commit cf8f2a3463
2 changed files with 47 additions and 15 deletions

View File

@@ -6,6 +6,7 @@ package org.whispersystems.websocket.session;
import java.util.LinkedList;
import java.util.List;
import java.util.concurrent.locks.ReentrantLock;
import javax.annotation.Nullable;
import org.whispersystems.websocket.WebSocketClient;
@@ -13,6 +14,8 @@ public class WebSocketSessionContext {
private final List<WebSocketEventListener> closeListeners = new LinkedList<>();
private final ReentrantLock lock = new ReentrantLock();
private final WebSocketClient webSocketClient;
private Object authenticated;
@@ -39,21 +42,33 @@ public class WebSocketSessionContext {
return authenticated;
}
public synchronized void addWebsocketClosedListener(WebSocketEventListener listener) {
if (!closed) this.closeListeners.add(listener);
else listener.onWebSocketClose(this, 1000, "Closed");
public void addWebsocketClosedListener(WebSocketEventListener listener) {
lock.lock();
try {
if (!closed)
this.closeListeners.add(listener);
else
listener.onWebSocketClose(this, 1000, "Closed");
} finally {
lock.unlock();
}
}
public WebSocketClient getClient() {
return webSocketClient;
}
public synchronized void notifyClosed(int statusCode, String reason) {
for (WebSocketEventListener listener : closeListeners) {
listener.onWebSocketClose(this, statusCode, reason);
}
public void notifyClosed(int statusCode, String reason) {
lock.lock();
try {
for (WebSocketEventListener listener : closeListeners) {
listener.onWebSocketClose(this, statusCode, reason);
}
closed = true;
closed = true;
} finally {
lock.unlock();
}
}
public interface WebSocketEventListener {