[freenet-cvs] r15049 - trunk/freenet/src/freenet/pluginmanager
toad at freenetproject.org
toad at freenetproject.org
Sat Sep 8 15:58:42 UTC 2007
Author: toad
Date: 2007-09-08 15:58:42 +0000 (Sat, 08 Sep 2007)
New Revision: 15049
Modified:
trunk/freenet/src/freenet/pluginmanager/PluginHandler.java
trunk/freenet/src/freenet/pluginmanager/PluginInfoWrapper.java
trunk/freenet/src/freenet/pluginmanager/PluginManager.java
Log:
Unregister plugin from web interface etc before telling it to terminate. Remove it from the plugin list only after it has successfully terminated and any thread has returned.
Modified: trunk/freenet/src/freenet/pluginmanager/PluginHandler.java
===================================================================
--- trunk/freenet/src/freenet/pluginmanager/PluginHandler.java 2007-09-08 15:53:42 UTC (rev 15048)
+++ trunk/freenet/src/freenet/pluginmanager/PluginHandler.java 2007-09-08 15:58:42 UTC (rev 15049)
@@ -81,6 +81,7 @@
System.err.println("Caught Throwable while running plugin: "+t);
t.printStackTrace();
}
+ pm.unregisterPlugin(pi); // If not already unregistered
if(!(plugin instanceof FredPluginThreadless))
pm.removePlugin(pi);
} else {
Modified: trunk/freenet/src/freenet/pluginmanager/PluginInfoWrapper.java
===================================================================
--- trunk/freenet/src/freenet/pluginmanager/PluginInfoWrapper.java 2007-09-08 15:53:42 UTC (rev 15048)
+++ trunk/freenet/src/freenet/pluginmanager/PluginInfoWrapper.java 2007-09-08 15:58:42 UTC (rev 15049)
@@ -93,6 +93,7 @@
* or else a value in milliseconds.
**/
public void stopPlugin(PluginManager manager, int maxWaitTime) {
+ manager.unregisterPlugin(this);
plug.terminate();
stopping = true;
if(thread != null) {
Modified: trunk/freenet/src/freenet/pluginmanager/PluginManager.java
===================================================================
--- trunk/freenet/src/freenet/pluginmanager/PluginManager.java 2007-09-08 15:53:42 UTC (rev 15048)
+++ trunk/freenet/src/freenet/pluginmanager/PluginManager.java 2007-09-08 15:58:42 UTC (rev 15049)
@@ -168,14 +168,21 @@
}
/**
- * Remove a plugin from the plugin list, unregister it from anywhere it may
- * have registered. This is eventually called whenever any plugin is removed.
- * @param t
+ * Remove a plugin from the plugin list.
*/
public void removePlugin(PluginInfoWrapper pi) {
synchronized (pluginWrappers) {
if(!pluginWrappers.remove(pi)) return;
}
+ core.storeConfig();
+ }
+
+ /**
+ * Unregister a plugin from any user interface or other callbacks it may be
+ * registered with. Call this before removePlugin(): the plugin becomes
+ * unvisitable immediately, but it may take time for it to shut down completely.
+ */
+ public void unregisterPlugin(PluginInfoWrapper pi) {
synchronized (toadletList) {
try {
toadletList.remove(pi.getPluginClassName());
More information about the cvs
mailing list