From e68c50d614bd94571ce35be8cd417c1c6cb50256 Mon Sep 17 00:00:00 2001 From: adbenitez Date: Wed, 15 Jan 2025 20:56:32 +0100 Subject: [PATCH] avoid race condition in onPlayerStateChanged inside AudioSlidePlayer.requestDuration --- .../securesms/audio/AudioSlidePlayer.java | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/src/main/java/org/thoughtcrime/securesms/audio/AudioSlidePlayer.java b/src/main/java/org/thoughtcrime/securesms/audio/AudioSlidePlayer.java index 375291bd5..46a05eabe 100644 --- a/src/main/java/org/thoughtcrime/securesms/audio/AudioSlidePlayer.java +++ b/src/main/java/org/thoughtcrime/securesms/audio/AudioSlidePlayer.java @@ -87,11 +87,14 @@ public class AudioSlidePlayer { public void onPlayerStateChanged(boolean playWhenReady, int playbackState) { if (playbackState == Player.STATE_READY) { Util.runOnMain(() -> { - Log.d(TAG, "request duration " + durationCalculator.getDuration()); - getListener().onReceivedDuration(Long.valueOf(durationCalculator.getDuration()).intValue()); - durationCalculator.release(); - durationCalculator.removeListener(this); - durationCalculator = null; + synchronized (AudioSlidePlayer.this) { + if (durationCalculator == null) return; + Log.d(TAG, "request duration " + durationCalculator.getDuration()); + getListener().onReceivedDuration(Long.valueOf(durationCalculator.getDuration()).intValue()); + durationCalculator.release(); + durationCalculator.removeListener(this); + durationCalculator = null; + } }); } }