Skip to content
This repository was archived by the owner on Aug 24, 2025. It is now read-only.

Commit 1d78204

Browse files
committed
TrackDataHub: prevent crash due to race condition.
Fixes #787.
1 parent aa34f5d commit 1d78204

1 file changed

Lines changed: 8 additions & 3 deletions

File tree

src/main/java/de/dennisguse/opentracks/content/TrackDataHub.java

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -353,6 +353,11 @@ private void notifyTrackPointsTableUpdate(boolean updateSamplingState, Set<Track
353353
}
354354

355355
TrackPoint trackPoint = null;
356+
TrackStatisticsUpdater currentUpdater = trackStatisticsUpdater; //TODO This prevents a NPE if stop() is happening while notifyTrackPointsTableUpdate()
357+
if (currentUpdater == null) {
358+
Log.e(TAG, "notifyTrackPointsTableUpdate() while being stopped.");
359+
return;
360+
}
356361
try (TrackPointIterator trackPointIterator = contentProviderUtils.getTrackPointLocationIterator(selectedTrackId, next)) {
357362

358363
while (trackPointIterator.hasNext()) {
@@ -375,16 +380,16 @@ private void notifyTrackPointsTableUpdate(boolean updateSamplingState, Set<Track
375380
samplingFrequency = 1 + (int) (numTotalPoints / targetNumPoints);
376381
}
377382

378-
trackStatisticsUpdater.addTrackPoint(trackPoint, recordingDistanceInterval);
383+
currentUpdater.addTrackPoint(trackPoint, recordingDistanceInterval);
379384

380385
// Also include the last point if the selected track is not recording.
381386
if ((localNumLoadedTrackPoints % samplingFrequency == 0) || (trackPointId == lastTrackPointId && !isSelectedTrackRecording())) {
382387
for (TrackDataListener trackDataListener : sampledInListeners) {
383-
trackDataListener.onSampledInTrackPoint(trackPoint, trackStatisticsUpdater.getTrackStatistics(), trackStatisticsUpdater.getSmoothedSpeed(), trackStatisticsUpdater.getSmoothedAltitude());
388+
trackDataListener.onSampledInTrackPoint(trackPoint, currentUpdater.getTrackStatistics(), currentUpdater.getSmoothedSpeed(), currentUpdater.getSmoothedAltitude());
384389
}
385390
} else {
386391
for (TrackDataListener trackDataListener : sampledOutListeners) {
387-
trackDataListener.onSampledOutTrackPoint(trackPoint, trackStatisticsUpdater.getTrackStatistics());
392+
trackDataListener.onSampledOutTrackPoint(trackPoint, currentUpdater.getTrackStatistics());
388393
}
389394
}
390395

0 commit comments

Comments
 (0)