Author: toad
Date: 2007-07-13 18:37:21 +0000 (Fri, 13 Jul 2007)
New Revision: 14085

Modified:
   trunk/freenet/src/freenet/pluginmanager/FredPlugin.java
   trunk/freenet/src/freenet/pluginmanager/PluginHandler.java
   trunk/freenet/src/freenet/pluginmanager/PluginManager.java
Log:
Don't start plugins until we finish constructing the node. Should prevent NPE 
in the spider plugin.

Modified: trunk/freenet/src/freenet/pluginmanager/FredPlugin.java
===================================================================
--- trunk/freenet/src/freenet/pluginmanager/FredPlugin.java     2007-07-13 
18:37:04 UTC (rev 14084)
+++ trunk/freenet/src/freenet/pluginmanager/FredPlugin.java     2007-07-13 
18:37:21 UTC (rev 14085)
@@ -8,5 +8,6 @@

        public void terminate();

+       /** Run the plugin. Called after node startup. Should be able to access 
queue etc at this point. */
        public void runPlugin(PluginRespirator pr);
 }

Modified: trunk/freenet/src/freenet/pluginmanager/PluginHandler.java
===================================================================
--- trunk/freenet/src/freenet/pluginmanager/PluginHandler.java  2007-07-13 
18:37:04 UTC (rev 14084)
+++ trunk/freenet/src/freenet/pluginmanager/PluginHandler.java  2007-07-13 
18:37:21 UTC (rev 14085)
@@ -1,5 +1,7 @@
 package freenet.pluginmanager;

+import java.util.Vector;
+
 import freenet.support.Logger;
 import freenet.support.OOMHandler;

@@ -20,17 +22,24 @@
         * @param plug
         */
        public static PluginInfoWrapper startPlugin(PluginManager pm, String 
filename, FredPlugin plug, PluginRespirator pr) {
-               PluginStarter ps = new PluginStarter(pr);
-               PluginInfoWrapper pi = new PluginInfoWrapper(plug, ps, 
filename);
+               final PluginStarter ps = new PluginStarter(pr);
+               final PluginInfoWrapper pi = new PluginInfoWrapper(plug, ps, 
filename);

                // This is an ugly trick... sorry ;o)
                // The thread still exists as an identifier, but is never 
started if the
                // plugin doesn't require it
                ps.setPlugin(pm, plug);
-               if (!pi.isThreadlessPlugin())
-                       ps.start();
-               else
-                       ps.run();
+               // Run after startup
+               // FIXME this is horrible, wastes a thread, need to make 
PluginStarter a Runnable 
+               // not a Thread, and then deal with the consequences of that 
(removePlugin(Thread)) ...
+               pm.getTicker().queueTimedJob(new Runnable() {
+                       public void run() {
+                               if (!pi.isThreadlessPlugin())
+                                       ps.start();
+                               else
+                                       ps.run();
+                       }
+               }, 0);
                return pi;
        }


Modified: trunk/freenet/src/freenet/pluginmanager/PluginManager.java
===================================================================
--- trunk/freenet/src/freenet/pluginmanager/PluginManager.java  2007-07-13 
18:37:04 UTC (rev 14084)
+++ trunk/freenet/src/freenet/pluginmanager/PluginManager.java  2007-07-13 
18:37:21 UTC (rev 14085)
@@ -27,6 +27,7 @@
 import freenet.l10n.L10n;
 import freenet.node.Node;
 import freenet.node.NodeClientCore;
+import freenet.node.Ticker;
 import freenet.node.useralerts.SimpleUserAlert;
 import freenet.node.useralerts.UserAlert;
 import freenet.support.Logger;
@@ -496,4 +497,8 @@

                return (FredPlugin)o;
        }
+       
+       Ticker getTicker() {
+               return node.getTicker();
+       }
 }


Reply via email to