From 394903a8f07ddfef4875948bea60d39dea834d38 Mon Sep 17 00:00:00 2001
From: zzz <zzz@mail.i2p>
Date: Mon, 29 Mar 2010 21:14:35 +0000
Subject: [PATCH]       - Implement destroy() in i2psnark to prevent dups

---
 .../java/src/org/klomp/snark/SnarkManager.java    | 15 ++++++++++++---
 .../src/org/klomp/snark/web/I2PSnarkServlet.java  |  6 ++++++
 2 files changed, 18 insertions(+), 3 deletions(-)

diff --git a/apps/i2psnark/java/src/org/klomp/snark/SnarkManager.java b/apps/i2psnark/java/src/org/klomp/snark/SnarkManager.java
index c909a112f0..d0d9a3bd84 100644
--- a/apps/i2psnark/java/src/org/klomp/snark/SnarkManager.java
+++ b/apps/i2psnark/java/src/org/klomp/snark/SnarkManager.java
@@ -40,6 +40,8 @@ public class SnarkManager implements Snark.CompleteListener {
     private I2PSnarkUtil _util;
     private PeerCoordinatorSet _peerCoordinatorSet;
     private ConnectionAcceptor _connectionAcceptor;
+    private Thread _monitor;
+    private boolean _running;
     
     public static final String PROP_I2CP_HOST = "i2psnark.i2cpHost";
     public static final String PROP_I2CP_PORT = "i2psnark.i2cpPort";
@@ -78,15 +80,22 @@ public class SnarkManager implements Snark.CompleteListener {
      *  for i2cp host/port or i2psnark.dir
      */
     public void start() {
+        _running = true;
         _peerCoordinatorSet = new PeerCoordinatorSet();
         _connectionAcceptor = new ConnectionAcceptor(_util);
         int minutes = getStartupDelayMinutes();
         _messages.add(_("Adding torrents in {0} minutes", minutes));
-        I2PAppThread monitor = new I2PAppThread(new DirMonitor(), "Snark DirMonitor");
-        monitor.setDaemon(true);
-        monitor.start();
+        _monitor = new I2PAppThread(new DirMonitor(), "Snark DirMonitor", true);
+        _monitor.start();
         _context.addShutdownTask(new SnarkManagerShutdown());
     }
+
+    public void stop() {
+        _running = false;
+        _monitor.interrupt();
+        _connectionAcceptor.halt();
+        (new SnarkManagerShutdown()).run();
+    }
     
     /** hook to I2PSnarkUtil for the servlet */
     public I2PSnarkUtil util() { return _util; }
diff --git a/apps/i2psnark/java/src/org/klomp/snark/web/I2PSnarkServlet.java b/apps/i2psnark/java/src/org/klomp/snark/web/I2PSnarkServlet.java
index 013d70a94c..2a11305131 100644
--- a/apps/i2psnark/java/src/org/klomp/snark/web/I2PSnarkServlet.java
+++ b/apps/i2psnark/java/src/org/klomp/snark/web/I2PSnarkServlet.java
@@ -59,6 +59,12 @@ public class I2PSnarkServlet extends HttpServlet {
         _manager.start();
     }
     
+    @Override
+    public void destroy() {
+        _manager.stop();
+        super.destroy();
+    }
+
     @Override
     public void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
         req.setCharacterEncoding("UTF-8");
-- 
GitLab