Remove job adds from database transactions.

This commit is contained in:
Greyson Parrelli
2020-12-03 17:33:04 -05:00
parent 31960b53a0
commit 97047bccde
6 changed files with 63 additions and 43 deletions

View File

@@ -9,6 +9,7 @@ import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.annotation.WorkerThread;
import org.thoughtcrime.securesms.database.DatabaseFactory;
import org.thoughtcrime.securesms.jobmanager.impl.DefaultExecutorFactory;
import org.thoughtcrime.securesms.jobmanager.impl.JsonDataSerializer;
import org.thoughtcrime.securesms.jobmanager.workmanager.WorkManagerMigrator;
@@ -17,7 +18,7 @@ import org.thoughtcrime.securesms.logging.Log;
import org.thoughtcrime.securesms.util.Debouncer;
import org.thoughtcrime.securesms.util.TextSecurePreferences;
import org.thoughtcrime.securesms.util.Util;
import org.thoughtcrime.securesms.util.concurrent.NonMainThreadExecutor;
import org.thoughtcrime.securesms.util.concurrent.FilteredExecutor;
import org.whispersystems.libsignal.util.guava.Optional;
import java.util.ArrayList;
@@ -57,7 +58,17 @@ public class JobManager implements ConstraintObserver.Notifier {
public JobManager(@NonNull Application application, @NonNull Configuration configuration) {
this.application = application;
this.configuration = configuration;
this.executor = new NonMainThreadExecutor(configuration.getExecutorFactory().newSingleThreadExecutor("signal-JobManager"));
this.executor = new FilteredExecutor(configuration.getExecutorFactory().newSingleThreadExecutor("signal-JobManager"),
() -> {
if (Util.isMainThread()) {
return true;
} else if (DatabaseFactory.inTransaction(application)) {
Log.w(TAG, "Tried to add a job while in a transaction!", new Throwable());
return true;
} else {
return false;
}
});
this.jobTracker = configuration.getJobTracker();
this.jobController = new JobController(application,
configuration.getJobStorage(),