From 96ef0cb234056ec23cd9bd7b4e2ce8bf26eec5e2 Mon Sep 17 00:00:00 2001 From: death-claw <53543762+death-claw@users.noreply.github.com> Date: Mon, 10 May 2021 11:17:02 +0100 Subject: [PATCH] Fix race condition --- .../tn/mnlr/vripper/download/DownloadService.java | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/vripper-server/src/main/java/tn/mnlr/vripper/download/DownloadService.java b/vripper-server/src/main/java/tn/mnlr/vripper/download/DownloadService.java index 62b0953..fb80711 100644 --- a/vripper-server/src/main/java/tn/mnlr/vripper/download/DownloadService.java +++ b/vripper-server/src/main/java/tn/mnlr/vripper/download/DownloadService.java @@ -31,7 +31,7 @@ public class DownloadService { private final ConcurrentHashMap threadCount = new ConcurrentHashMap<>(); private final ExecutorService executor = Executors.newFixedThreadPool(MAX_POOL_SIZE); - private final List running = Collections.synchronizedList(new ArrayList<>()); + private final List running = new ArrayList<>(); private final List pending = new ArrayList<>(); private final SettingsService settingsService; @@ -75,7 +75,7 @@ public class DownloadService { executor.awaitTermination(5, TimeUnit.SECONDS); } - private void stopRunning(@NonNull String postId) { + private synchronized void stopRunning(@NonNull String postId) { List stopping = new ArrayList<>(); Iterator iterator = running.iterator(); while (iterator.hasNext()) { @@ -129,15 +129,15 @@ public class DownloadService { enqueue(post, images); } - private boolean isPending(String postId) { + private synchronized boolean isPending(String postId) { return pending.stream().anyMatch(p -> p.getPost().getPostId().equals(postId)); } - private boolean isRunning(String postId) { + private synchronized boolean isRunning(String postId) { return running.stream().anyMatch(p -> p.getPost().getPostId().equals(postId)); } - private void stop(String postId) { + private synchronized void stop(String postId) { try { pauseQ = true; final Post post = dataService.findPostByPostId(postId).orElseThrow(); @@ -245,7 +245,7 @@ public class DownloadService { } } - private void push(DownloadJob downloadJob) { + private synchronized void push(DownloadJob downloadJob) { log.debug(String.format("Scheduling a job for %s", downloadJob.getImage().getUrl())); executor.execute(new DownloadJobWrapper(downloadJob)); running.add(downloadJob);