Prevent narrow race condition when resetting network components.

This commit is contained in:
Greyson Parrelli 2021-02-05 11:40:58 -05:00 committed by GitHub
parent 2678a00781
commit 951d4ad06f
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -95,16 +95,19 @@ public class ApplicationDependencies {
}
public static @NonNull SignalServiceAccountManager getSignalServiceAccountManager() {
if (accountManager == null) {
SignalServiceAccountManager local = accountManager;
if (local != null) {
return local;
}
synchronized (LOCK) {
if (accountManager == null) {
accountManager = provider.provideSignalServiceAccountManager();
}
}
}
return accountManager;
}
}
public static @NonNull GroupsV2Authorization getGroupsV2Authorization() {
if (groupsV2Authorization == null) {
@ -152,6 +155,12 @@ public class ApplicationDependencies {
}
public static @NonNull SignalServiceMessageSender getSignalServiceMessageSender() {
SignalServiceMessageSender local = messageSender;
if (local != null) {
return local;
}
synchronized (LOCK) {
if (messageSender == null) {
messageSender = provider.provideSignalServiceMessageSender();
@ -161,22 +170,24 @@ public class ApplicationDependencies {
IncomingMessageObserver.getUnidentifiedPipe(),
TextSecurePreferences.isMultiDevice(application));
}
}
return messageSender;
}
}
public static @NonNull SignalServiceMessageReceiver getSignalServiceMessageReceiver() {
if (messageReceiver == null) {
SignalServiceMessageReceiver local = messageReceiver;
if (local != null) {
return local;
}
synchronized (LOCK) {
if (messageReceiver == null) {
messageReceiver = provider.provideSignalServiceMessageReceiver();
}
}
}
return messageReceiver;
}
}
public static void resetSignalServiceMessageReceiver() {
synchronized (LOCK) {
@ -301,16 +312,19 @@ public class ApplicationDependencies {
}
public static @NonNull IncomingMessageObserver getIncomingMessageObserver() {
if (incomingMessageObserver == null) {
IncomingMessageObserver local = incomingMessageObserver;
if (local != null) {
return local;
}
synchronized (LOCK) {
if (incomingMessageObserver == null) {
incomingMessageObserver = provider.provideIncomingMessageObserver();
}
}
}
return incomingMessageObserver;
}
}
public static @NonNull TrimThreadsByDateManager getTrimThreadsByDateManager() {
if (trimThreadsByDateManager == null) {