From fc430e58113b6ee12bcaa8183cd4e9886f9a6a7b Mon Sep 17 00:00:00 2001 From: CappielloAntonio Date: Sun, 18 Apr 2021 19:26:54 +0200 Subject: [PATCH] Fix condition race in deleting element and insert new one --- .../play/repository/AlbumArtistRepository.java | 15 ++++++++++++--- .../play/repository/SongArtistRepository.java | 15 ++++++++++++--- .../play/ui/fragment/SyncFragment.java | 4 ---- 3 files changed, 24 insertions(+), 10 deletions(-) diff --git a/app/src/main/java/com/cappielloantonio/play/repository/AlbumArtistRepository.java b/app/src/main/java/com/cappielloantonio/play/repository/AlbumArtistRepository.java index 62efa277..540e643f 100644 --- a/app/src/main/java/com/cappielloantonio/play/repository/AlbumArtistRepository.java +++ b/app/src/main/java/com/cappielloantonio/play/repository/AlbumArtistRepository.java @@ -11,6 +11,7 @@ import com.cappielloantonio.play.database.dao.SongArtistCrossDao; import com.cappielloantonio.play.model.AlbumArtistCross; import com.cappielloantonio.play.model.Queue; import com.cappielloantonio.play.model.Song; +import com.cappielloantonio.play.model.SongArtistCross; import com.cappielloantonio.play.util.QueueUtil; import java.util.ArrayList; @@ -27,9 +28,17 @@ public class AlbumArtistRepository { } public void insertAll(List crosses) { - InsertAllThreadSafe insertAll = new InsertAllThreadSafe(albumArtistCrossDao, crosses); - Thread thread = new Thread(insertAll); - thread.start(); + try { + final Thread delete = new Thread(new DeleteAllAlbumArtistCrossThreadSafe(albumArtistCrossDao)); + final Thread insertAll = new Thread(new InsertAllThreadSafe(albumArtistCrossDao, crosses)); + + delete.start(); + delete.join(); + insertAll.start(); + insertAll.join(); + } catch (InterruptedException e) { + e.printStackTrace(); + } } private static class InsertAllThreadSafe implements Runnable { diff --git a/app/src/main/java/com/cappielloantonio/play/repository/SongArtistRepository.java b/app/src/main/java/com/cappielloantonio/play/repository/SongArtistRepository.java index e9b5b599..464bd63c 100644 --- a/app/src/main/java/com/cappielloantonio/play/repository/SongArtistRepository.java +++ b/app/src/main/java/com/cappielloantonio/play/repository/SongArtistRepository.java @@ -7,6 +7,7 @@ import com.cappielloantonio.play.database.dao.AlbumArtistCrossDao; import com.cappielloantonio.play.database.dao.SongArtistCrossDao; import com.cappielloantonio.play.database.dao.SongGenreCrossDao; import com.cappielloantonio.play.model.AlbumArtistCross; +import com.cappielloantonio.play.model.Song; import com.cappielloantonio.play.model.SongArtistCross; import java.util.List; @@ -22,9 +23,17 @@ public class SongArtistRepository { } public void insertAll(List crosses) { - InsertAllThreadSafe insertAll = new InsertAllThreadSafe(songArtistCrossDao, crosses); - Thread thread = new Thread(insertAll); - thread.start(); + try { + final Thread delete = new Thread(new DeleteAllSongArtistCrossThreadSafe(songArtistCrossDao)); + final Thread insertAll = new Thread(new InsertAllThreadSafe(songArtistCrossDao, crosses)); + + delete.start(); + delete.join(); + insertAll.start(); + insertAll.join(); + } catch (InterruptedException e) { + e.printStackTrace(); + } } private static class InsertAllThreadSafe implements Runnable { diff --git a/app/src/main/java/com/cappielloantonio/play/ui/fragment/SyncFragment.java b/app/src/main/java/com/cappielloantonio/play/ui/fragment/SyncFragment.java index 572fc11e..f4f59981 100644 --- a/app/src/main/java/com/cappielloantonio/play/ui/fragment/SyncFragment.java +++ b/app/src/main/java/com/cappielloantonio/play/ui/fragment/SyncFragment.java @@ -271,8 +271,6 @@ public class SyncFragment extends Fragment { * Sincronizzazzione dell'album con gli artisti che hanno collaborato per la sua produzione | isProduced = false */ private void syncAlbumArtistCross(ArrayList albums) { - albumArtistRepository.deleteAll(); - List crosses = new ArrayList<>(); for(Album album: albums) { @@ -298,8 +296,6 @@ public class SyncFragment extends Fragment { } private void syncSongArtistCross(ArrayList songs) { - songArtistRepository.deleteAll(); - List crosses = new ArrayList<>(); for(Song song: songs) {