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();
+ }
}