From d3134c05a58aab1f6b5e55de05559bea9c254b9f Mon Sep 17 00:00:00 2001 From: "(no author)" <(no author)@71dcc7fd-b1f2-4e5d-bb8e-274146e81173> Date: Fri, 20 Jun 2025 11:49:38 +0000 Subject: [PATCH] Fix: Ensure blocking queues are local & cancel futures on early exit The original code used class-level `BlockingQueue` instances (`queue0`, `queue1`) which caused issues when processing multiple files concurrently. Each comparison needed its *own* dedicated queues to avoid data corruption and incorrect comparisons between different file pairs. This commit creates the `BlockingQueue` instances locally within the file comparison loop. Additionally, the futures submitted to the executor service were not always being cancelled if an exception occurred or the comparison finished before reaching the end of the files. This could lead to lingering threads. The `finally` block now ensures that both futures are cancelled regardless of how the try block exits, preventing resource leaks and potential deadlocks. git-svn-id: svn://home0/checkDataIntegrity@3745 71dcc7fd-b1f2-4e5d-bb8e-274146e81173 --- bin/checkDataIntegrity/Task.class | Bin 6792 -> 6831 bytes checkDataIntegrity.jar | Bin 21037 -> 21032 bytes src/checkDataIntegrity/Task.java | 20 +++++++++----------- 3 files changed, 9 insertions(+), 11 deletions(-) diff --git a/bin/checkDataIntegrity/Task.class b/bin/checkDataIntegrity/Task.class index a8cc54bd88017befbed7d8fee90e3a9be663eb24..5752781ab2309e87c72e6714558d913a4a8912e2 100644 GIT binary patch literal 6831 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 diff --git a/checkDataIntegrity.jar b/checkDataIntegrity.jar index 626e4045c1fe21a4775aab249e1442b4b3f9b70b..dde1d260350a4706791bbd7ca4c0b2cff95a9994 100644 GIT binary patch delta 3861 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 W`TuLojDHsip`o@+G?ixLpZpKD^XMM{ delta 3866 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 diff --git a/src/checkDataIntegrity/Task.java b/src/checkDataIntegrity/Task.java index 1a0105e..3290fb0 100644 --- a/src/checkDataIntegrity/Task.java +++ b/src/checkDataIntegrity/Task.java @@ -24,10 +24,6 @@ class Task implements Consumer { private final ExecutorService executorService = Executors.newVirtualThreadPerTaskExecutor(); - private final BlockingQueue queue0 = new LinkedBlockingQueue<>(1); - - private final BlockingQueue queue1 = new LinkedBlockingQueue<>(1); - Task(final Args args, final ProgramState state) { this.args = args; this.state = state; @@ -45,12 +41,15 @@ class Task implements Consumer { final Path p1 = Path.of(this.args.path1() + rel); try (RandomAccessFile raf0 = new RandomAccessFile(path.toFile(), "r"); RandomAccessFile raf1 = new RandomAccessFile(p1.toFile(), "r")) { - final Future future0 = this.executorService.submit(() -> this.loader(raf0, this.queue0)); - final Future future1 = this.executorService.submit(() -> this.loader(raf1, this.queue1)); + final BlockingQueue queue0 = new LinkedBlockingQueue<>(1); + final BlockingQueue queue1 = new LinkedBlockingQueue<>(1); + final Future future0 = this.executorService.submit(() -> this.loader(raf0, queue0)); + final Future future1 = this.executorService.submit(() -> this.loader(raf1, queue1)); try { + while (true) { - final Buffer buf0 = this.queue0.take(); - final Buffer buf1 = this.queue1.take(); + final Buffer buf0 = queue0.take(); + final Buffer buf1 = queue1.take(); try { if (buf0.len != buf1.len) { System.out.println(rel + ": Length mismatch"); @@ -73,16 +72,15 @@ class Task implements Consumer { } } } - catch (final Exception ex) { + finally { future0.cancel(true); future1.cancel(true); - throw ex; } } } catch (NoSuchFileException | FileNotFoundException | InvalidPathException ex) { } - catch (InterruptedException ex) { + catch (final InterruptedException ex) { Thread.currentThread().interrupt(); } catch (final Exception ex) {