Added try/finally to ensure that unlock is correctly called if an

exception is thrown by TrackedRace.setStatusAndProgress
This commit is contained in:
Steffen Schaefer committed 2016-09-28 16:00:04 +02:00
1 parent 72463bc793
commit 0ab64a06e3
1 file changed
+10 -7
@@ -308,15 +308,18 @@ public class FixLoaderAndTracker implements TrackingDataLoader {
updateCallback.run();
}
} finally {
synchronized (FixLoaderAndTracker.this) {
int currentActiveLoaders = activeLoaders.decrementAndGet();
FixLoaderAndTracker.this.notifyAll();
if (currentActiveLoaders == 0) {
setStatusAndProgress(stopRequested.get() ? TrackedRaceStatusEnum.FINISHED
: TrackedRaceStatusEnum.TRACKING, 1.0);
try {
synchronized (FixLoaderAndTracker.this) {
int currentActiveLoaders = activeLoaders.decrementAndGet();
FixLoaderAndTracker.this.notifyAll();
if (currentActiveLoaders == 0) {
setStatusAndProgress(stopRequested.get() ? TrackedRaceStatusEnum.FINISHED
: TrackedRaceStatusEnum.TRACKING, 1.0);
}
}
} finally {
trackedRace.unlockAfterSerializationRead();
}
trackedRace.unlockAfterSerializationRead();
}
}
});