diff --git a/bin/checkDataIntegrity/Task.class b/bin/checkDataIntegrity/Task.class index a8cc54b..5752781 100644 Binary files a/bin/checkDataIntegrity/Task.class and b/bin/checkDataIntegrity/Task.class differ diff --git a/checkDataIntegrity.jar b/checkDataIntegrity.jar index 626e404..dde1d26 100644 Binary files a/checkDataIntegrity.jar and b/checkDataIntegrity.jar differ 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) {