From: plaa Date: Tue, 13 Mar 2012 06:01:43 +0000 (+0000) Subject: Fixed leaking threads in simulations X-Git-Tag: upstream/12.03~1^2~16 X-Git-Url: https://git.gag.com/?a=commitdiff_plain;h=046c6ae2e0e4e5318e67b00dad57f254dac4bd82;p=debian%2Fopenrocket Fixed leaking threads in simulations git-svn-id: https://openrocket.svn.sourceforge.net/svnroot/openrocket/trunk@455 180e2498-e6e9-4542-8430-84ac67f01cd8 --- diff --git a/core/ChangeLog b/core/ChangeLog index e1df0361..3c29aed6 100644 --- a/core/ChangeLog +++ b/core/ChangeLog @@ -1,3 +1,11 @@ +2012-03-13 Sampo Niskanne + + * [BUG] Threads piled up when running simulations + +2012-03-11 Sampo Niskanen + + * Update copyright statements + 2012-02-19 Sampo Niskanen * Display computed motor class diff --git a/core/src/net/sf/openrocket/gui/main/SimulationRunDialog.java b/core/src/net/sf/openrocket/gui/main/SimulationRunDialog.java index c1080305..f85b248f 100644 --- a/core/src/net/sf/openrocket/gui/main/SimulationRunDialog.java +++ b/core/src/net/sf/openrocket/gui/main/SimulationRunDialog.java @@ -47,7 +47,7 @@ public class SimulationRunDialog extends JDialog { private static final LogHelper log = Application.getLogger(); private static final Translator trans = Application.getTranslator(); - + /** Update the dialog status every this many ms */ private static final long UPDATE_MS = 200; @@ -57,19 +57,15 @@ public class SimulationRunDialog extends JDialog { /** Flight progress at apogee */ private static final double APOGEE_PROGRESS = 0.7; - - /* - * The executor service is not static since we want concurrent simulation - * dialogs to run in parallel, ie. they both have their own executor service. - */ - private final ExecutorService executor = Executors.newFixedThreadPool( + + private final static ExecutorService executor = Executors.newFixedThreadPool( SwingPreferences.getMaxThreadCount()); - + private final JLabel simLabel, timeLabel, altLabel, velLabel; private final JProgressBar progressBar; - + /* * NOTE: Care must be used when accessing the simulation parameters, since they * are being run in another thread. Mutexes are used to avoid concurrent usage, which @@ -85,7 +81,7 @@ public class SimulationRunDialog extends JDialog { public SimulationRunDialog(Window window, Simulation... simulations) { //// Running simulations... - super(window, trans.get("SimuRunDlg.title.RunSim"), Dialog.ModalityType.DOCUMENT_MODAL); + super(window, trans.get("SimuRunDlg.title.RunSim"), Dialog.ModalityType.APPLICATION_MODAL); if (simulations.length == 0) { throw new IllegalArgumentException("Called with no simulations to run"); @@ -93,7 +89,7 @@ public class SimulationRunDialog extends JDialog { this.simulations = simulations; - + // Randomize the simulation random seeds for (Simulation sim : simulations) { sim.getOptions().randomizeSeed(); @@ -138,7 +134,7 @@ public class SimulationRunDialog extends JDialog { progressBar = new JProgressBar(); panel.add(progressBar, "spanx, growx, wrap para"); - + // Add cancel button JButton cancel = new JButton(trans.get("dlg.but.cancel")); cancel.addActionListener(new ActionListener() { @@ -149,7 +145,7 @@ public class SimulationRunDialog extends JDialog { }); panel.add(cancel, "spanx, tag cancel"); - + // Cancel simulations when user closes the window this.addWindowListener(new WindowAdapter() { @Override @@ -158,7 +154,7 @@ public class SimulationRunDialog extends JDialog { } }); - + this.add(panel); this.setMinimumSize(new Dimension(300, 0)); this.setLocationByPlatform(true); @@ -194,8 +190,8 @@ public class SimulationRunDialog extends JDialog { } - - + + private void updateProgress() { int index; for (index = 0; index < simulations.length; index++) { @@ -242,7 +238,7 @@ public class SimulationRunDialog extends JDialog { } - + /** * A SwingWorker that performs a flight simulation. It periodically updates the * simulation statuses of the parent class and calls updateProgress().