From f2d276c24610018149902f0d0619ae5962b009c4 Mon Sep 17 00:00:00 2001 From: Dennis Guse Date: Mon, 5 Jul 2021 16:50:33 +0200 Subject: [PATCH] TrackRecordingService: on recording end, we have a race condition while shutting down. --- .../services/TrackRecordingService.java | 22 +++++++++++++------ 1 file changed, 15 insertions(+), 7 deletions(-) diff --git a/src/main/java/de/dennisguse/opentracks/services/TrackRecordingService.java b/src/main/java/de/dennisguse/opentracks/services/TrackRecordingService.java index dead15483..6c5c42fb6 100644 --- a/src/main/java/de/dennisguse/opentracks/services/TrackRecordingService.java +++ b/src/main/java/de/dennisguse/opentracks/services/TrackRecordingService.java @@ -95,7 +95,13 @@ public class TrackRecordingService extends Service implements HandlerServer.Hand @Override public void run() { updateRecordingDataWhileRecording(); - handler.postDelayed(this, RECORDING_DATA_UPDATE_INTERVAL.toMillis()); + Handler localHandler = TrackRecordingService.this.handler; + if (localHandler == null) { + // when this happens, no recording is running and we should not send any notifications. + //TODO This implementation is not a good idea; rather solve the issue for this properly + return; + } + localHandler.postDelayed(this, RECORDING_DATA_UPDATE_INTERVAL.toMillis()); } }; @@ -745,16 +751,18 @@ public class TrackRecordingService extends Service implements HandlerServer.Hand BluetoothRemoteSensorManager localRemoteSensorManager = this.remoteSensorManager; AltitudeSumManager localAltitudeSumManager = this.altitudeSumManager; - if (localAltitudeSumManager != null && localRemoteSensorManager != null) { - // onEndRecording the managers might already be set to null. - localAltitudeSumManager.fill(tmpLastTrackPoint); - localRemoteSensorManager.fill(tmpLastTrackPoint); + if (localAltitudeSumManager == null || localRemoteSensorManager == null) { + // when this happens, no recording is running and we should not send any notifications. + //TODO This implementation is not a good idea; rather solve the issue for this properly + return; } - + localAltitudeSumManager.fill(tmpLastTrackPoint); + SensorDataSet sensorDataSet = localRemoteSensorManager.getSensorDataSet(); + sensorDataSet.fillTrackPoint(tmpLastTrackPoint); tmpTrackStatisticsUpdater.addTrackPoint(tmpLastTrackPoint, recordingDistanceInterval); track.setTrackStatistics(tmpTrackStatisticsUpdater.getTrackStatistics()); - recordingDataObservable.postValue(new RecordingData(track, tmpLastTrackPoint, remoteSensorManager.getSensorDataSet())); + recordingDataObservable.postValue(new RecordingData(track, tmpLastTrackPoint, sensorDataSet)); } public LiveData getRecordingStatusObservable() {