From 159805701c7dfd8e0d51a9b4eb1b6c56c7842985 Mon Sep 17 00:00:00 2001 From: Emmanuel Bigeon Date: Thu, 11 Oct 2018 12:42:14 -0400 Subject: [PATCH] Fixed run lockings Signed-off-by: Emmanuel Bigeon --- .../bigeon/gclc/utils/ReadingRunnable.java | 29 +++++++++++++------ .../bigeon/gclc/utils/WritingRunnable.java | 6 ++-- 2 files changed, 24 insertions(+), 11 deletions(-) diff --git a/gclc/src/main/java/net/bigeon/gclc/utils/ReadingRunnable.java b/gclc/src/main/java/net/bigeon/gclc/utils/ReadingRunnable.java index c49acbf..444a0e9 100644 --- a/gclc/src/main/java/net/bigeon/gclc/utils/ReadingRunnable.java +++ b/gclc/src/main/java/net/bigeon/gclc/utils/ReadingRunnable.java @@ -155,7 +155,7 @@ public final class ReadingRunnable implements Runnable { .getLogger(ReadingRunnable.class.getName()); /** Read messages. */ - private final Deque messages = new ArrayDeque<>(); + private final Deque messages = new ArrayDeque<>(); /** the reader. */ private final BufferedReader reader; @@ -170,7 +170,7 @@ public final class ReadingRunnable implements Runnable { /** The lock. */ private final Object messageBlockerLock = new Object(); /** The message being delivered. */ - private String delivering; + private String delivering; /** Create a reading runnable. * @@ -320,12 +320,19 @@ public final class ReadingRunnable implements Runnable { * @see java.lang.Runnable#run() */ @Override public void run() { - while (running) { + boolean cont = true; + while (cont) { + synchronized (lock) { + cont = running; + if (!running) { + break; + } + } try { String line = reader.readLine(); if (line == null) { // Buffer end - running = false; + setRunning(false); return; } LOGGER.finer("Read: " + line); //$NON-NLS-1$ @@ -335,17 +342,21 @@ public final class ReadingRunnable implements Runnable { lock.notifyAll(); } } catch (final InterruptedIOException e) { - if (running) { - LOGGER.info("Reading interrupted"); //$NON-NLS-1$ + synchronized (lock) { + if (running) { + LOGGER.info("Reading interrupted"); //$NON-NLS-1$ + } } LOGGER.log(Level.FINER, "Read interruption was caused by an exception", //$NON-NLS-1$ e); } catch (final IOException e) { LOGGER.log(Level.FINE, "The stream reading threw an exception", //$NON-NLS-1$ e); - if (running) { - LOGGER.severe("Unable to read from stream"); //$NON-NLS-1$ - running = false; + synchronized (lock) { + if (running) { + LOGGER.severe("Unable to read from stream"); //$NON-NLS-1$ + setRunning(false); + } } return; } diff --git a/gclc/src/main/java/net/bigeon/gclc/utils/WritingRunnable.java b/gclc/src/main/java/net/bigeon/gclc/utils/WritingRunnable.java index b0fee75..48ed530 100644 --- a/gclc/src/main/java/net/bigeon/gclc/utils/WritingRunnable.java +++ b/gclc/src/main/java/net/bigeon/gclc/utils/WritingRunnable.java @@ -171,8 +171,10 @@ public final class WritingRunnable implements Runnable { } } } catch (final InterruptedException e) { - if (running) { - LOGGER.log(Level.SEVERE, "Thread interruption exception.", e); //$NON-NLS-1$ + synchronized (lock) { + if (running) { + LOGGER.log(Level.SEVERE, "Thread interruption exception.", e); //$NON-NLS-1$ + } } Thread.currentThread().interrupt(); }