mirror of
https://github.com/signalapp/Signal-Server
synced 2026-04-18 07:05:18 +01:00
remove synchronized locks that may be held while blocking
This commit is contained in:
@@ -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 {
|
||||
|
||||
Reference in New Issue
Block a user