Author: toad
Date: 2007-09-08 15:34:31 +0000 (Sat, 08 Sep 2007)
New Revision: 15045
Modified:
trunk/freenet/src/freenet/pluginmanager/PluginInfoWrapper.java
trunk/freenet/src/freenet/pluginmanager/PluginManager.java
Log:
More refactoring:
Do the removePlugin() call in the PluginInfoWrapper.
Don't call removePlugin() twice: it gets called either after the thread-based
plugin exits, or immediately.
Modified: trunk/freenet/src/freenet/pluginmanager/PluginInfoWrapper.java
===================================================================
--- trunk/freenet/src/freenet/pluginmanager/PluginInfoWrapper.java
2007-09-08 15:30:10 UTC (rev 15044)
+++ trunk/freenet/src/freenet/pluginmanager/PluginInfoWrapper.java
2007-09-08 15:34:31 UTC (rev 15045)
@@ -83,11 +83,19 @@
/**
* Tell the plugin to quit. Interrupt it if it's a thread-based plugin
which
- * might be sleeping. */
- public void stopPlugin() {
+ * might be sleeping. Then call removePlugin() on it on the manager -
either
+ * now, if it's threadless, or after it terminates, if it's thread
based.
+ * @param manager The plugin manager object.
+ **/
+ public void stopPlugin(PluginManager manager) {
plug.terminate();
- if(thread != null)
+ if(thread != null) {
thread.interrupt();
+ // Will be removed when the thread exits.
+ } else {
+ // Remove immediately
+ manager.removePlugin(this);
+ }
}
public boolean isPproxyPlugin() {
Modified: trunk/freenet/src/freenet/pluginmanager/PluginManager.java
===================================================================
--- trunk/freenet/src/freenet/pluginmanager/PluginManager.java 2007-09-08
15:30:10 UTC (rev 15044)
+++ trunk/freenet/src/freenet/pluginmanager/PluginManager.java 2007-09-08
15:34:31 UTC (rev 15045)
@@ -291,7 +291,7 @@
}
}
if (found) {
- pi.stopPlugin();
+ pi.stopPlugin(this);
removePlugin(pi);
}
}