diff --git a/Slackware/i2p-base/rc.i2p_def b/Slackware/i2p-base/rc.i2p_def index 075e9e8472279bdde4daeef3005fba4f39233d40..c231922e5f59973d16b26fba3321329dc1debcb9 100644 --- a/Slackware/i2p-base/rc.i2p_def +++ b/Slackware/i2p-base/rc.i2p_def @@ -4,7 +4,7 @@ i2p_start() { # Check if router is up first! /bin/su - -c "( export PATH=\"$PATH:/usr/lib/java/bin:/usr/lib/java/jre/bin\"; directory status )" > /dev/null - if [ ! $? -eq 0 ] ; then { + if [ $? -eq 0 ] ; then { # I2p is already running, so tell the user. echo "I2P is already running..." i2p_status diff --git a/apps/routerconsole/java/src/net/i2p/router/web/PluginStarter.java b/apps/routerconsole/java/src/net/i2p/router/web/PluginStarter.java index 6958b350e9b2f2ccaf2e4126758ab75137f659af..c44b34f39afd86135d88707f505f65578c5749d7 100644 --- a/apps/routerconsole/java/src/net/i2p/router/web/PluginStarter.java +++ b/apps/routerconsole/java/src/net/i2p/router/web/PluginStarter.java @@ -50,6 +50,7 @@ public class PluginStarter implements Runnable { private static Map<String, ThreadGroup> pluginThreadGroups = new ConcurrentHashMap<String, ThreadGroup>(); // one thread group per plugin (map key=plugin name) private static Map<String, Collection<Job>> pluginJobs = new ConcurrentHashMap<String, Collection<Job>>(); private static Map<String, ClassLoader> _clCache = new ConcurrentHashMap(); + private static Map<String, Collection<String>> pluginWars = new ConcurrentHashMap<String, Collection<String>>(); public PluginStarter(RouterContext ctx) { _context = ctx; @@ -125,6 +126,8 @@ public class PluginStarter implements Runnable { File webappDir = new File(consoleDir, "webapps"); String fileNames[] = webappDir.list(RouterConsoleRunner.WarFilenameFilter.instance()); if (fileNames != null) { + if(!pluginWars.containsKey(appName)) + pluginWars.put(appName, new ConcurrentHashSet<String>()); for (int i = 0; i < fileNames.length; i++) { try { String warName = fileNames[i].substring(0, fileNames[i].lastIndexOf(".war")); @@ -139,6 +142,7 @@ public class PluginStarter implements Runnable { //log.error("Starting webapp: " + warName); String path = new File(webappDir, fileNames[i]).getCanonicalPath(); WebAppStarter.startWebApp(ctx, server, warName, path); + pluginWars.get(appName).add(warName); } } catch (IOException ioe) { log.error("Error resolving '" + fileNames[i] + "' in '" + webappDir, ioe); @@ -215,6 +219,7 @@ public class PluginStarter implements Runnable { // stop console webapps in console/webapps Server server = WebAppStarter.getConsoleServer(); if (server != null) { + /* File consoleDir = new File(pluginDir, "console"); Properties props = RouterConsoleRunner.webAppProperties(consoleDir.getAbsolutePath()); File webappDir = new File(consoleDir, "webapps"); @@ -228,6 +233,13 @@ public class PluginStarter implements Runnable { WebAppStarter.stopWebApp(server, warName); } } + */ + Iterator <String> wars = pluginWars.get(appName).iterator(); + while (wars.hasNext()) { + String warName = wars.next(); + WebAppStarter.stopWebApp(server, warName); + } + pluginWars.get(appName).clear(); } // remove summary bar link @@ -487,10 +499,25 @@ public class PluginStarter implements Runnable { isJobRunning = true; break; } + boolean isWarRunning = false; + if(pluginWars.containsKey(pluginName)) { + Iterator <String> it = pluginWars.get(pluginName).iterator(); + while(it.hasNext() && !isWarRunning) { + String warName = it.next(); + if(WebAppStarter.isWebAppRunning(warName)) { + isWarRunning = true; + } + } + } if (log.shouldLog(Log.DEBUG)) - log.debug("plugin name = <" + pluginName + ">; threads running? " + isClientThreadRunning(pluginName) + "; webapp runing? " + WebAppStarter.isWebAppRunning(pluginName) + "; jobs running? " + isJobRunning); - return isClientThreadRunning(pluginName) || WebAppStarter.isWebAppRunning(pluginName) || isJobRunning; + log.debug("plugin name = <" + pluginName + ">; threads running? " + isClientThreadRunning(pluginName) + "; webapp runing? " + isWarRunning + "; jobs running? " + isJobRunning); + return isClientThreadRunning(pluginName) || isWarRunning || isJobRunning; + // + //if (log.shouldLog(Log.DEBUG)) + // log.debug("plugin name = <" + pluginName + ">; threads running? " + isClientThreadRunning(pluginName) + "; webapp runing? " + WebAppStarter.isWebAppRunning(pluginName) + "; jobs running? " + isJobRunning); + //return isClientThreadRunning(pluginName) || WebAppStarter.isWebAppRunning(pluginName) || isJobRunning; + // } /** diff --git a/history.txt b/history.txt index 398b6ca0c8fa803fc677d92605ae817e97399536..00b97e9892cf50fda35f36750b9d855bafad3a9f 100644 --- a/history.txt +++ b/history.txt @@ -1,3 +1,12 @@ +2010-11-24 sponge + * Slackware, fix rc.i2p, bad logic. + +2010-11-24 sponge + * Plugin: ticket 104 Fix webapp isRunning to check ALL webapps. + The only defecency is that if one is running, that it considers the + entire pliugin to be running. I'm not sure if that is a good thing + or a bad thing, but the other code checks threads that way. + 2010-11-22 zzz * Addressbook: Fix rename error on Windows (tkt 323 - thanks RN!) * build.xml: Cleanup, fix distclean error in older ants. diff --git a/router/java/src/net/i2p/router/RouterVersion.java b/router/java/src/net/i2p/router/RouterVersion.java index f6e6df3a5c0d10fbf1efc2f7069c342c2fe16f4e..4e28a2c8d2676ff98ee569a93ae883ef407d9461 100644 --- a/router/java/src/net/i2p/router/RouterVersion.java +++ b/router/java/src/net/i2p/router/RouterVersion.java @@ -18,7 +18,7 @@ public class RouterVersion { /** deprecated */ public final static String ID = "Monotone"; public final static String VERSION = CoreVersion.VERSION; - public final static long BUILD = 4; + public final static long BUILD = 5; /** for example "-test" */ public final static String EXTRA = "";