mirror of
https://github.com/oxen-io/session-android.git
synced 2025-06-09 20:58:34 +00:00
Fail a job when you can't instantiate it.
This will still crash, but prevent apps from getting into crash loops when we have bad data in a job.
This commit is contained in:
parent
6cd4728e3c
commit
88c0e6f8ab
@ -322,6 +322,8 @@ class JobController {
|
|||||||
|
|
||||||
private @NonNull Job createJob(@NonNull JobSpec jobSpec, @NonNull List<ConstraintSpec> constraintSpecs) {
|
private @NonNull Job createJob(@NonNull JobSpec jobSpec, @NonNull List<ConstraintSpec> constraintSpecs) {
|
||||||
Job.Parameters parameters = buildJobParameters(jobSpec, constraintSpecs);
|
Job.Parameters parameters = buildJobParameters(jobSpec, constraintSpecs);
|
||||||
|
|
||||||
|
try {
|
||||||
Data data = dataSerializer.deserialize(jobSpec.getSerializedData());
|
Data data = dataSerializer.deserialize(jobSpec.getSerializedData());
|
||||||
Job job = jobInstantiator.instantiate(jobSpec.getFactoryKey(), parameters, data);
|
Job job = jobInstantiator.instantiate(jobSpec.getFactoryKey(), parameters, data);
|
||||||
|
|
||||||
@ -330,6 +332,20 @@ class JobController {
|
|||||||
job.setContext(application);
|
job.setContext(application);
|
||||||
|
|
||||||
return job;
|
return job;
|
||||||
|
} catch (RuntimeException e) {
|
||||||
|
Log.e(TAG, "Failed to instantiate job! Failing it and its dependencies without calling Job#onCanceled. Crash imminent.");
|
||||||
|
|
||||||
|
List<String> failIds = Stream.of(jobStorage.getDependencySpecsThatDependOnJob(jobSpec.getId()))
|
||||||
|
.map(DependencySpec::getJobId)
|
||||||
|
.toList();
|
||||||
|
|
||||||
|
jobStorage.deleteJob(jobSpec.getId());
|
||||||
|
jobStorage.deleteJobs(failIds);
|
||||||
|
|
||||||
|
Log.e(TAG, "Failed " + failIds.size() + " dependent jobs.");
|
||||||
|
|
||||||
|
throw e;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private @NonNull Job.Parameters buildJobParameters(@NonNull JobSpec jobSpec, @NonNull List<ConstraintSpec> constraintSpecs) {
|
private @NonNull Job.Parameters buildJobParameters(@NonNull JobSpec jobSpec, @NonNull List<ConstraintSpec> constraintSpecs) {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user