[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