From c3ad93752308bcf21425731745b9269543220871 Mon Sep 17 00:00:00 2001 From: zzz Date: Wed, 12 Jan 2022 07:25:07 -0500 Subject: [PATCH] Stop some of the threads on frame destroy Kill the main frame on plugin exit --- src/net/i2p/itoopie/gui/OverviewTab.java | 21 ++++++++++++++++--- src/net/i2p/itoopie/gui/TrayManager.java | 4 ++++ src/net/i2p/itoopie/gui/WindowHandler.java | 8 +++++++ .../itoopie/gui/component/BandwidthChart.java | 9 ++++++++ .../component/ParticipatingTunnelsChart.java | 9 +++++++- .../chart/InboundBandwidthTracker.java | 12 ++++++++++- .../chart/ObjRecorder2Trace2DAdapter.java | 4 ++++ .../gui/component/chart/ObjectRecorder.java | 9 +++++++- .../chart/OutboundBandwidthTracker.java | 13 ++++++++++-- .../chart/ParticipatingTunnelsTracker.java | 12 ++++++++++- 10 files changed, 92 insertions(+), 9 deletions(-) diff --git a/src/net/i2p/itoopie/gui/OverviewTab.java b/src/net/i2p/itoopie/gui/OverviewTab.java index 76ea22b82..1ba45c1e0 100644 --- a/src/net/i2p/itoopie/gui/OverviewTab.java +++ b/src/net/i2p/itoopie/gui/OverviewTab.java @@ -46,6 +46,7 @@ public class OverviewTab extends TabLogoPanel { private final MultiLineLabel lblNetworkStatusSpecified; private final BandwidthChart bwChart; private final ParticipatingTunnelsChart partTunnelChart; + private volatile boolean running; public OverviewTab(String imageName, ConfigurationManager conf) { super(imageName); @@ -134,19 +135,33 @@ public class OverviewTab extends TabLogoPanel { final int updateInterval = _conf.getConf("overview.info.updateinterval", DEFAULT_INFO_UPDATE_INTERVAL); - (new Thread(){ + (new Thread("IToopie-OT"){ @Override public void run() { - while (true) { + running = true; + while (running) { populateInfo(); try { Thread.sleep(updateInterval); - } catch (Exception e){} // Never stop. + } catch (InterruptedException e) { + break; + } } } }).start(); } + /** + * @since 0.0.4 + */ + @Override + public void removeNotify() { + running = false; + bwChart.destroy(); + partTunnelChart.destroy(); + super.removeNotify(); + } + /** * @since 0.0.4 */ diff --git a/src/net/i2p/itoopie/gui/TrayManager.java b/src/net/i2p/itoopie/gui/TrayManager.java index 1a1d400f5..99dd18d5a 100644 --- a/src/net/i2p/itoopie/gui/TrayManager.java +++ b/src/net/i2p/itoopie/gui/TrayManager.java @@ -35,6 +35,7 @@ public class TrayManager { protected TrayIcon trayIcon; private final net.i2p.itoopie.Main main; private final ConfigurationManager _conf; + private WindowHandler _wh; /** * Instantiate tray manager. @@ -49,6 +50,7 @@ public class TrayManager { */ public synchronized void startManager() { final WindowHandler windowHandler = new WindowHandler(_conf); + _wh = windowHandler; windowHandler.toggleFrames(); // so the tray icon works right on Gnome try { Thread.sleep(500); } catch (InterruptedException ie) {} @@ -85,6 +87,8 @@ public class TrayManager { trayIcon = null; } } catch (Exception e) {} + if (_wh != null) + _wh.destroyMain(); } protected void languageChanged() { diff --git a/src/net/i2p/itoopie/gui/WindowHandler.java b/src/net/i2p/itoopie/gui/WindowHandler.java index 9dcd5c7a7..e2493a1ea 100644 --- a/src/net/i2p/itoopie/gui/WindowHandler.java +++ b/src/net/i2p/itoopie/gui/WindowHandler.java @@ -25,6 +25,14 @@ public class WindowHandler { mainFrame = frame; } + public void destroyMain() { + if (mainFrame != null) { + mainFrame.dispose(); + _frames.remove(mainFrame); + mainFrame = null; + } + } + public void deRegister(JFrame frame){ // don't remove the main frame when // the user clicks on the X, so we have the updated diff --git a/src/net/i2p/itoopie/gui/component/BandwidthChart.java b/src/net/i2p/itoopie/gui/component/BandwidthChart.java index 2f47233c7..4893871cc 100644 --- a/src/net/i2p/itoopie/gui/component/BandwidthChart.java +++ b/src/net/i2p/itoopie/gui/component/BandwidthChart.java @@ -89,6 +89,15 @@ public class BandwidthChart extends Chart2D{ bwInAdapter = new ObjRecorder2Trace2DAdapter(dataBWIn, bwInTracker, "m_value", updateInterval/2); bwOutAdapter = new ObjRecorder2Trace2DAdapter(dataBWOut, bwOutTracker, "m_value", updateInterval/2); } + + @Override + public void destroy() { + bwInTracker.kill(); + bwOutTracker.kill(); + bwInAdapter.kill(); + bwOutAdapter.kill(); + super.destroy(); + } /* public static void main(final String[] args) { diff --git a/src/net/i2p/itoopie/gui/component/ParticipatingTunnelsChart.java b/src/net/i2p/itoopie/gui/component/ParticipatingTunnelsChart.java index 335b3f1e3..a6a856cc2 100644 --- a/src/net/i2p/itoopie/gui/component/ParticipatingTunnelsChart.java +++ b/src/net/i2p/itoopie/gui/component/ParticipatingTunnelsChart.java @@ -75,7 +75,14 @@ public class ParticipatingTunnelsChart extends Chart2D { partTunnelTracker = new ParticipatingTunnelsTracker(updateInterval); partTunnelAdapter = new ObjRecorder2Trace2DAdapter(dataPartTunnels, partTunnelTracker, "m_value", updateInterval/2); } - + + @Override + public void destroy() { + partTunnelTracker.kill(); + partTunnelAdapter.kill(); + super.destroy(); + } + /* public static void main(final String[] args) { JFrame frame = new JFrame(); diff --git a/src/net/i2p/itoopie/gui/component/chart/InboundBandwidthTracker.java b/src/net/i2p/itoopie/gui/component/chart/InboundBandwidthTracker.java index d5663a8f1..ac9b2aa0d 100644 --- a/src/net/i2p/itoopie/gui/component/chart/InboundBandwidthTracker.java +++ b/src/net/i2p/itoopie/gui/component/chart/InboundBandwidthTracker.java @@ -16,6 +16,7 @@ public class InboundBandwidthTracker extends Thread implements Tracker { /** Last read bw */ private double m_value = 0; private final int updateInterval; + private volatile boolean running; /** * Start daemon that checks to current inbound bandwidth of the router. @@ -33,7 +34,8 @@ public class InboundBandwidthTracker extends Thread implements Tracker { @Override public void run() { - while (true) { + running = true; + while (running) { runOnce(); try { @@ -57,6 +59,14 @@ public class InboundBandwidthTracker extends Thread implements Tracker { } } + /** + * @since 0.0.4 + */ + public void kill() { + running = false; + interrupt(); + } + /** * @since 0.0.4 */ diff --git a/src/net/i2p/itoopie/gui/component/chart/ObjRecorder2Trace2DAdapter.java b/src/net/i2p/itoopie/gui/component/chart/ObjRecorder2Trace2DAdapter.java index 33996758a..382d82197 100644 --- a/src/net/i2p/itoopie/gui/component/chart/ObjRecorder2Trace2DAdapter.java +++ b/src/net/i2p/itoopie/gui/component/chart/ObjRecorder2Trace2DAdapter.java @@ -159,4 +159,8 @@ public class ObjRecorder2Trace2DAdapter implements ChangeListener { this.m_view.addPoint(tmpx, tmpy); } } + + public void kill() { + m_inspector.kill(); + } } diff --git a/src/net/i2p/itoopie/gui/component/chart/ObjectRecorder.java b/src/net/i2p/itoopie/gui/component/chart/ObjectRecorder.java index ab126a1a5..c66fa61f4 100644 --- a/src/net/i2p/itoopie/gui/component/chart/ObjectRecorder.java +++ b/src/net/i2p/itoopie/gui/component/chart/ObjectRecorder.java @@ -142,6 +142,7 @@ public class ObjectRecorder extends Thread { /** The instance to inspect. */ protected Tracker m_toinspect; + private volatile boolean running; /** * Creates an instance that will inspect the given Object in the given time @@ -353,7 +354,8 @@ public class ObjectRecorder extends Thread { */ @Override public void run() { - while (true) { + running = true; + while (running) { try { Thread.sleep(this.m_interval); } catch (final InterruptedException e) { @@ -363,6 +365,11 @@ public class ObjectRecorder extends Thread { } } + public void kill() { + running = false; + interrupt(); + } + /** * Define the amount of recorded states of the Object to inspect that remain * in memory. diff --git a/src/net/i2p/itoopie/gui/component/chart/OutboundBandwidthTracker.java b/src/net/i2p/itoopie/gui/component/chart/OutboundBandwidthTracker.java index c6acdc033..d1f5630f6 100644 --- a/src/net/i2p/itoopie/gui/component/chart/OutboundBandwidthTracker.java +++ b/src/net/i2p/itoopie/gui/component/chart/OutboundBandwidthTracker.java @@ -16,6 +16,7 @@ public class OutboundBandwidthTracker extends Thread implements Tracker { /** Last read bw */ private double m_value = 0; private final int updateInterval; + private volatile boolean running; /** * Start daemon that checks to current inbound bandwidth of the router. @@ -32,8 +33,8 @@ public class OutboundBandwidthTracker extends Thread implements Tracker { */ @Override public void run() { - - while (true) { + running = true; + while (running) { runOnce(); try { @@ -57,6 +58,14 @@ public class OutboundBandwidthTracker extends Thread implements Tracker { } } + /** + * @since 0.0.4 + */ + public void kill() { + running = false; + interrupt(); + } + /** * @since 0.0.4 */ diff --git a/src/net/i2p/itoopie/gui/component/chart/ParticipatingTunnelsTracker.java b/src/net/i2p/itoopie/gui/component/chart/ParticipatingTunnelsTracker.java index b093eb7ad..cef0f81e9 100644 --- a/src/net/i2p/itoopie/gui/component/chart/ParticipatingTunnelsTracker.java +++ b/src/net/i2p/itoopie/gui/component/chart/ParticipatingTunnelsTracker.java @@ -17,6 +17,7 @@ public class ParticipatingTunnelsTracker extends Thread implements Tracker { /** Last read bw */ private double m_value = 0; private final int updateInterval; + private volatile boolean running; /** * Start daemon that checks to current inbound bandwidth of the router. @@ -33,7 +34,8 @@ public class ParticipatingTunnelsTracker extends Thread implements Tracker { */ @Override public void run() { - while (true) { + running = true; + while (running) { runOnce(); try { @@ -57,6 +59,14 @@ public class ParticipatingTunnelsTracker extends Thread implements Tracker { } } + /** + * @since 0.0.4 + */ + public void kill() { + running = false; + interrupt(); + } + /** * @since 0.0.4 */