mirror of
https://github.com/signalapp/Signal-Server
synced 2026-04-20 17:38:04 +01:00
Only allow one thread to process stored messages at a time.
This commit is contained in:
committed by
Jon Chambers
parent
1a0c70acc2
commit
68256d2343
@@ -4,6 +4,7 @@ import com.codahale.metrics.Histogram;
|
||||
import com.codahale.metrics.Meter;
|
||||
import com.codahale.metrics.MetricRegistry;
|
||||
import com.codahale.metrics.SharedMetricRegistries;
|
||||
import com.google.common.annotations.VisibleForTesting;
|
||||
import com.google.protobuf.ByteString;
|
||||
import com.google.protobuf.InvalidProtocolBufferException;
|
||||
import org.slf4j.Logger;
|
||||
@@ -63,6 +64,8 @@ public class WebSocketConnection implements DispatchChannel, MessageAvailability
|
||||
private final WebSocketClient client;
|
||||
private final String connectionId;
|
||||
|
||||
private boolean processingStoredMessages = false;
|
||||
|
||||
public WebSocketConnection(PushSender pushSender,
|
||||
ReceiptSender receiptSender,
|
||||
MessagesManager messagesManager,
|
||||
@@ -180,7 +183,16 @@ public class WebSocketConnection implements DispatchChannel, MessageAvailability
|
||||
return response != null && response.getStatus() >= 200 && response.getStatus() < 300;
|
||||
}
|
||||
|
||||
private void processStoredMessages() {
|
||||
@VisibleForTesting
|
||||
void processStoredMessages() {
|
||||
synchronized (this) {
|
||||
if (processingStoredMessages) {
|
||||
return;
|
||||
}
|
||||
|
||||
processingStoredMessages = true;
|
||||
}
|
||||
|
||||
OutgoingMessageEntityList messages = messagesManager.getMessagesForDevice(account.getNumber(), account.getUuid(), device.getId(), client.getUserAgent());
|
||||
Iterator<OutgoingMessageEntity> iterator = messages.getMessages().iterator();
|
||||
|
||||
@@ -214,6 +226,10 @@ public class WebSocketConnection implements DispatchChannel, MessageAvailability
|
||||
if (!messages.hasMore()) {
|
||||
client.sendRequest("PUT", "/api/v1/queue/empty", Collections.singletonList(TimestampHeaderUtil.getTimestampHeader()), Optional.empty());
|
||||
}
|
||||
|
||||
synchronized (this) {
|
||||
processingStoredMessages = false;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
Reference in New Issue
Block a user