From 8c43b1a3c7005fed20a6582a9a0ca09ca692b774 Mon Sep 17 00:00:00 2001 From: Adrian Ulrich Date: Sat, 18 Oct 2014 15:39:00 +0200 Subject: [PATCH] fix crash during race with purge() in random mode --- .../android/vanilla/SongTimeline.java | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/src/ch/blinkenlights/android/vanilla/SongTimeline.java b/src/ch/blinkenlights/android/vanilla/SongTimeline.java index 07778bff..14d2e6ee 100644 --- a/src/ch/blinkenlights/android/vanilla/SongTimeline.java +++ b/src/ch/blinkenlights/android/vanilla/SongTimeline.java @@ -837,10 +837,14 @@ public final class SongTimeline { */ public void removeSongPosition(int pos) { synchronized (this) { + ArrayList songs = mSongs; + + if (songs.size() <= pos) // may happen if we race with purge() + return; + saveActiveSongs(); - mSongs.remove(pos); - + songs.remove(pos); if (pos < mCurrentPos) mCurrentPos--; if (getSong(1) == null) // wrap around if this was the last song @@ -858,10 +862,15 @@ public final class SongTimeline { */ public void moveSongPosition(int from, int to) { synchronized (this) { + ArrayList songs = mSongs; + + if (songs.size() <= from || songs.size() <= to) // may happen if we race with purge() + return; + saveActiveSongs(); - Song tmp = mSongs.remove(from); - mSongs.add(to, tmp); + Song tmp = songs.remove(from); + songs.add(to, tmp); if (mCurrentPos == from) { mCurrentPos = to; // active song was dragged to 'to'