Author: toad
Date: 2007-09-08 17:57:16 +0000 (Sat, 08 Sep 2007)
New Revision: 15068
Modified:
trunk/freenet/src/freenet/pluginmanager/PluginHandler.java
trunk/freenet/src/freenet/pluginmanager/PluginManager.java
Log:
Register for callback services (e.g. web interface) just before runPlugin() for
threaded, and just after for threadless - plugin may need to have the
PluginRespirator before handling incoming callbacks esp web - prevents an NPE
Modified: trunk/freenet/src/freenet/pluginmanager/PluginHandler.java
===================================================================
--- trunk/freenet/src/freenet/pluginmanager/PluginHandler.java 2007-09-08
17:48:23 UTC (rev 15067)
+++ trunk/freenet/src/freenet/pluginmanager/PluginHandler.java 2007-09-08
17:57:16 UTC (rev 15068)
@@ -43,7 +43,7 @@
}
private static class PluginStarter implements Runnable {
- private Object plugin = null;
+ private FredPlugin plugin = null;
private PluginRespirator pr;
private PluginManager pm = null;
final PluginInfoWrapper pi;
@@ -53,15 +53,20 @@
this.pi = pi;
}
- public void setPlugin(PluginManager pm, Object plugin) {
+ public void setPlugin(PluginManager pm, FredPlugin plugin) {
this.plugin = plugin;
this.pm = pm;
}
public void run() {
+ boolean threadless = plugin instanceof
FredPluginThreadless;
if (plugin instanceof FredPlugin) {
try {
+ if(!threadless) // Have to do it now
because threaded
+ pm.register(plugin, pi);
((FredPlugin)plugin).runPlugin(pr);
+ if(threadless) // Don't want it to
receive callbacks until after it has the PluginRespirator, else get NPEs
+ pm.register(plugin, pi);
} catch (OutOfMemoryError e) {
OOMHandler.handleOOM(e);
} catch (Throwable t) {
Modified: trunk/freenet/src/freenet/pluginmanager/PluginManager.java
===================================================================
--- trunk/freenet/src/freenet/pluginmanager/PluginManager.java 2007-09-08
17:48:23 UTC (rev 15067)
+++ trunk/freenet/src/freenet/pluginmanager/PluginManager.java 2007-09-08
17:57:16 UTC (rev 15068)
@@ -120,18 +120,6 @@
try {
plug = LoadPlugin(filename);
PluginInfoWrapper pi = PluginHandler.startPlugin(this,
filename, plug, pluginRespirator);
- // handles FProxy? If so, register
-
- if (pi.isPproxyPlugin())
- registerToadlet(plug);
-
- if(pi.isIPDetectorPlugin()) {
-
node.ipDetector.registerIPDetectorPlugin((FredPluginIPDetector) plug);
- }
- if(pi.isPortForwardPlugin()) {
-
node.ipDetector.registerPortForwardPlugin((FredPluginPortForward) plug);
- }
-
synchronized (pluginWrappers) {
pluginWrappers.add(pi);
}
@@ -155,6 +143,20 @@
if(store) core.storeConfig();
}
+ void register(FredPlugin plug, PluginInfoWrapper pi) {
+ // handles FProxy? If so, register
+
+ if (pi.isPproxyPlugin())
+ registerToadlet(plug);
+
+ if(pi.isIPDetectorPlugin()) {
+
node.ipDetector.registerIPDetectorPlugin((FredPluginIPDetector) plug);
+ }
+ if(pi.isPortForwardPlugin()) {
+
node.ipDetector.registerPortForwardPlugin((FredPluginPortForward) plug);
+ }
+ }
+
private String l10n(String key, String pattern, String value) {
return L10n.getString("PluginManager."+key, pattern, value);
}