mirror of
https://github.com/signalapp/Signal-Android.git
synced 2026-02-24 11:45:28 +00:00
Make sure not more than one libsignal Network instance is ever created
Co-authored-by: Greyson Parrelli <greyson@signal.org>
This commit is contained in:
committed by
Greyson Parrelli
parent
544cc06f13
commit
78e36b85d4
@@ -98,7 +98,7 @@ object ContactDiscoveryRefreshV2 {
|
||||
Optional.empty(),
|
||||
BuildConfig.CDSI_MRENCLAVE,
|
||||
10_000,
|
||||
if (FeatureFlags.useLibsignalNetForCdsiLookup()) BuildConfig.LIBSIGNAL_NET_ENV else null
|
||||
if (FeatureFlags.useLibsignalNetForCdsiLookup()) ApplicationDependencies.getLibsignalNetwork() else null
|
||||
) {
|
||||
Log.i(TAG, "Ignoring token for one-off lookup.")
|
||||
}
|
||||
@@ -163,7 +163,7 @@ object ContactDiscoveryRefreshV2 {
|
||||
Optional.ofNullable(token),
|
||||
BuildConfig.CDSI_MRENCLAVE,
|
||||
timeoutMs,
|
||||
if (FeatureFlags.useLibsignalNetForCdsiLookup()) BuildConfig.LIBSIGNAL_NET_ENV else null
|
||||
if (FeatureFlags.useLibsignalNetForCdsiLookup()) ApplicationDependencies.getLibsignalNetwork() else null
|
||||
) { tokenToSave ->
|
||||
stopwatch.split("network-pre-token")
|
||||
if (!isPartialRefresh) {
|
||||
|
||||
@@ -8,6 +8,7 @@ import androidx.annotation.NonNull;
|
||||
import androidx.annotation.VisibleForTesting;
|
||||
|
||||
import org.signal.core.util.concurrent.DeadlockDetector;
|
||||
import org.signal.libsignal.net.Network;
|
||||
import org.signal.libsignal.zkgroup.profiles.ClientZkProfileOperations;
|
||||
import org.signal.libsignal.zkgroup.receipts.ClientZkReceiptOperations;
|
||||
import org.thoughtcrime.securesms.components.TypingStatusRepository;
|
||||
@@ -85,6 +86,7 @@ public class ApplicationDependencies {
|
||||
private static final Object FRAME_RATE_TRACKER_LOCK = new Object();
|
||||
private static final Object JOB_MANAGER_LOCK = new Object();
|
||||
private static final Object SIGNAL_HTTP_CLIENT_LOCK = new Object();
|
||||
private static final Object LIBSIGNAL_NETWORK_LOCK = new Object();
|
||||
|
||||
private static Application application;
|
||||
private static Provider provider;
|
||||
@@ -129,6 +131,7 @@ public class ApplicationDependencies {
|
||||
private static volatile DeadlockDetector deadlockDetector;
|
||||
private static volatile ClientZkReceiptOperations clientZkReceiptOperations;
|
||||
private static volatile ScheduledMessageManager scheduledMessagesManager;
|
||||
private static volatile Network libsignalNetwork;
|
||||
|
||||
@MainThread
|
||||
public static void init(@NonNull Application application, @NonNull Provider provider) {
|
||||
@@ -685,6 +688,17 @@ public class ApplicationDependencies {
|
||||
return deadlockDetector;
|
||||
}
|
||||
|
||||
public static @NonNull Network getLibsignalNetwork() {
|
||||
if (libsignalNetwork == null) {
|
||||
synchronized (LIBSIGNAL_NETWORK_LOCK) {
|
||||
if (libsignalNetwork == null) {
|
||||
libsignalNetwork = provider.provideLibsignalNetwork();
|
||||
}
|
||||
}
|
||||
}
|
||||
return libsignalNetwork;
|
||||
}
|
||||
|
||||
public interface Provider {
|
||||
@NonNull GroupsV2Operations provideGroupsV2Operations(@NonNull SignalServiceConfiguration signalServiceConfiguration);
|
||||
@NonNull SignalServiceAccountManager provideSignalServiceAccountManager(@NonNull SignalServiceConfiguration signalServiceConfiguration, @NonNull GroupsV2Operations groupsV2Operations);
|
||||
@@ -723,5 +737,6 @@ public class ApplicationDependencies {
|
||||
@NonNull DeadlockDetector provideDeadlockDetector();
|
||||
@NonNull ClientZkReceiptOperations provideClientZkReceiptOperations(@NonNull SignalServiceConfiguration signalServiceConfiguration);
|
||||
@NonNull ScheduledMessageManager provideScheduledMessageManager();
|
||||
@NonNull Network provideLibsignalNetwork();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -11,6 +11,7 @@ import androidx.annotation.VisibleForTesting;
|
||||
import org.signal.core.util.ThreadUtil;
|
||||
import org.signal.core.util.concurrent.DeadlockDetector;
|
||||
import org.signal.core.util.concurrent.SignalExecutors;
|
||||
import org.signal.libsignal.net.Network;
|
||||
import org.signal.libsignal.zkgroup.profiles.ClientZkProfileOperations;
|
||||
import org.signal.libsignal.zkgroup.receipts.ClientZkReceiptOperations;
|
||||
import org.thoughtcrime.securesms.BuildConfig;
|
||||
@@ -228,6 +229,11 @@ public class ApplicationDependencyProvider implements ApplicationDependencies.Pr
|
||||
return new ScheduledMessageManager(context);
|
||||
}
|
||||
|
||||
@Override
|
||||
public @NonNull Network provideLibsignalNetwork() {
|
||||
return new Network(BuildConfig.LIBSIGNAL_NET_ENV);
|
||||
}
|
||||
|
||||
@Override
|
||||
public @NonNull TypingStatusRepository provideTypingStatusRepository() {
|
||||
return new TypingStatusRepository();
|
||||
|
||||
Reference in New Issue
Block a user