From e064b0a0e1f46bbd53ee7372c605bc152f7e476d Mon Sep 17 00:00:00 2001
From: zzz <zzz@mail.i2p>
Date: Fri, 29 Aug 2008 13:12:55 +0000
Subject: [PATCH]     * Shutdown: Call the shutdown hooks before the router
 shutdown       rather than after

---
 router/java/src/net/i2p/router/Router.java | 18 ++++++++++--------
 1 file changed, 10 insertions(+), 8 deletions(-)

diff --git a/router/java/src/net/i2p/router/Router.java b/router/java/src/net/i2p/router/Router.java
index 827e0c457e..254db3179d 100644
--- a/router/java/src/net/i2p/router/Router.java
+++ b/router/java/src/net/i2p/router/Router.java
@@ -796,6 +796,16 @@ public class Router {
         _isAlive = false;
         _context.random().saveSeed();
         I2PThread.removeOOMEventListener(_oomListener);
+        // Run the shutdown hooks first in case they want to send some goodbye messages
+        // Maybe we need a delay after this too?
+        try {
+            for (Iterator iter = _shutdownTasks.iterator(); iter.hasNext(); ) {
+                Runnable task = (Runnable)iter.next();
+                task.run();
+            }
+        } catch (Throwable t) {
+            _log.log(Log.CRIT, "Error running shutdown task", t);
+        }
         try { _context.jobQueue().shutdown(); } catch (Throwable t) { _log.log(Log.CRIT, "Error shutting down the job queue", t); }
         //try { _context.adminManager().shutdown(); } catch (Throwable t) { _log.log(Log.CRIT, "Error shutting down the admin manager", t); }        
         try { _context.statPublisher().shutdown(); } catch (Throwable t) { _log.log(Log.CRIT, "Error shutting down the stats manager", t); }
@@ -811,14 +821,6 @@ public class Router {
         try { _sessionKeyPersistenceHelper.shutdown(); } catch (Throwable t) { _log.log(Log.CRIT, "Error shutting down the session key manager", t); }
         RouterContext.listContexts().remove(_context);
         dumpStats();
-        try {
-            for (Iterator iter = _shutdownTasks.iterator(); iter.hasNext(); ) {
-                Runnable task = (Runnable)iter.next();
-                task.run();
-            }
-        } catch (Throwable t) {
-            _log.log(Log.CRIT, "Error running shutdown task", t);
-        }
         finalShutdown(exitCode);
     }
 
-- 
GitLab