From b2fc0d87a7672cad5c88de6640f8d30eecf24653 Mon Sep 17 00:00:00 2001 From: Ziver Koc Date: Thu, 22 Jan 2015 17:36:14 +0100 Subject: [PATCH] Fixed some thread race issues --- .../uecontrol/core/UeControlExecutor.java | 18 +++++++++++------- .../core/logic/UeBehaviourIterator.java | 18 ++++++++++-------- .../uecontrol/core/logic/UeBehaviourStop.java | 9 +++++---- .../gui/fragments/ExecNotification.java | 2 +- 4 files changed, 27 insertions(+), 20 deletions(-) diff --git a/app/src/main/java/com/ericsson/uecontrol/core/UeControlExecutor.java b/app/src/main/java/com/ericsson/uecontrol/core/UeControlExecutor.java index 05990bb..45392ac 100755 --- a/app/src/main/java/com/ericsson/uecontrol/core/UeControlExecutor.java +++ b/app/src/main/java/com/ericsson/uecontrol/core/UeControlExecutor.java @@ -162,9 +162,11 @@ public class UeControlExecutor implements Runnable{ currentlyActive = null; } } - if(csvLogger != null){ - csvLogger.flush(); - csvLogger = null; + synchronized (csvLogger) { + if (csvLogger != null) { + csvLogger.flush(); + csvLogger = null; + } } log.info("Execution completed"); if(execListener != null) @@ -236,10 +238,12 @@ public class UeControlExecutor implements Runnable{ downloadSpeed.setHandledData(0); } if (uploadSpeed.isUpdated()) { - if(csvLogger != null) - csvLogger.write(getRunningBehaviour().getName(), - downloadSpeed.getBitThroughput(), - uploadSpeed.getBitThroughput()); + synchronized (csvLogger) { + if (csvLogger != null) + csvLogger.write(getRunningBehaviour().getName(), + downloadSpeed.getBitThroughput(), + uploadSpeed.getBitThroughput()); + } if (throughputListener != null) throughputListener.throughputUpdate( downloadSpeed.getBitThroughput(), diff --git a/app/src/main/java/com/ericsson/uecontrol/core/logic/UeBehaviourIterator.java b/app/src/main/java/com/ericsson/uecontrol/core/logic/UeBehaviourIterator.java index 2c73f9f..fab2202 100755 --- a/app/src/main/java/com/ericsson/uecontrol/core/logic/UeBehaviourIterator.java +++ b/app/src/main/java/com/ericsson/uecontrol/core/logic/UeBehaviourIterator.java @@ -19,14 +19,16 @@ public class UeBehaviourIterator extends UeBehaviour { @Override protected void execute() throws Exception { - iterationCount++; - if(iterationCount < iterations){ - log.debug("Iteration: "+ iterationCount); - super.getExecutor().setNextBehaviour(0); - Thread.sleep(VISUAL_SLEEP_PERIOD); // Sleep as a visual queue - } - else{ - log.debug("Iteration done, skipping"); + Thread.sleep(VISUAL_SLEEP_PERIOD); // Sleep as a visual queue + if(!super.stopExecution()) { + iterationCount++; + if (iterationCount < iterations) { + log.debug("Iteration: " + iterationCount); + super.getExecutor().setNextBehaviour(0); + } else { + log.debug("Iteration done, skipping"); + iterationCount = 0; + } } } diff --git a/app/src/main/java/com/ericsson/uecontrol/core/logic/UeBehaviourStop.java b/app/src/main/java/com/ericsson/uecontrol/core/logic/UeBehaviourStop.java index 17ef413..ca7b5ee 100755 --- a/app/src/main/java/com/ericsson/uecontrol/core/logic/UeBehaviourStop.java +++ b/app/src/main/java/com/ericsson/uecontrol/core/logic/UeBehaviourStop.java @@ -15,11 +15,12 @@ public class UeBehaviourStop extends UeBehaviour { @Override protected void execute() throws Exception { UeControlExecutor executor = super.getExecutor(); - log.debug("Terminating executor"); - executor.terminateNonBlock(); - log.debug("Resetting executor"); - executor.reset(); Thread.sleep(VISUAL_SLEEP_PERIOD); // Sleep as a visual queue + + if(!super.stopExecution()) { + log.debug("Terminating executor"); + executor.terminateNonBlock(); + } } diff --git a/app/src/main/java/com/ericsson/uecontrol/gui/fragments/ExecNotification.java b/app/src/main/java/com/ericsson/uecontrol/gui/fragments/ExecNotification.java index fb236f6..12fa19f 100755 --- a/app/src/main/java/com/ericsson/uecontrol/gui/fragments/ExecNotification.java +++ b/app/src/main/java/com/ericsson/uecontrol/gui/fragments/ExecNotification.java @@ -25,7 +25,7 @@ public class ExecNotification { } public static void update(double downThroughput, double upThroughput){ - if(mBuilder != null) { + if(mBuilder != null && MainActivity.getExecutor().getRunningBehaviour() != null) { mBuilder.setContentTitle("Exec Behaviour: " + MainActivity.getExecutor().getRunningBehaviour().getName()); mBuilder.setContentText(" Down: " + StringUtil.getBitThroughputString(downThroughput) + " Up: " + StringUtil.getBitThroughputString(upThroughput));