[freenet-cvs] r15040 - trunk/freenet/src/freenet/pluginmanager

toad at freenetproject.org toad at freenetproject.org
Sat Sep 8 15:22:50 UTC 2007


Author: toad
Date: 2007-09-08 15:22:50 +0000 (Sat, 08 Sep 2007)
New Revision: 15040

Modified:
   trunk/freenet/src/freenet/pluginmanager/PluginHandler.java
   trunk/freenet/src/freenet/pluginmanager/PluginManager.java
Log:
removePlugin(PluginInfoWrapper) NOT (Thread) !!!!
- avoid iterating pluginwrappers (originally a hashmap named plugininfo) to find it, we already have it
- looks to me like threadless plugins were seriously broken by the thread-based lookup; removing threadless plugins which had a toadlet would for example probably do bad things

Modified: trunk/freenet/src/freenet/pluginmanager/PluginHandler.java
===================================================================
--- trunk/freenet/src/freenet/pluginmanager/PluginHandler.java	2007-09-08 15:19:21 UTC (rev 15039)
+++ trunk/freenet/src/freenet/pluginmanager/PluginHandler.java	2007-09-08 15:22:50 UTC (rev 15040)
@@ -82,7 +82,7 @@
 					t.printStackTrace();
 				}
 				if(!(plugin instanceof FredPluginThreadless))
-					pm.removePlugin(this);
+					pm.removePlugin(pi);
 			} else {
 				// If not FredPlugin, then the whole thing is aborted,
 				// and then this method will return, killing the thread

Modified: trunk/freenet/src/freenet/pluginmanager/PluginManager.java
===================================================================
--- trunk/freenet/src/freenet/pluginmanager/PluginManager.java	2007-09-08 15:19:21 UTC (rev 15039)
+++ trunk/freenet/src/freenet/pluginmanager/PluginManager.java	2007-09-08 15:22:50 UTC (rev 15040)
@@ -172,24 +172,17 @@
 	 * have registered. This is eventually called whenever any plugin is removed.
 	 * @param t
 	 */
-	public void removePlugin(Thread t) {
+	public void removePlugin(PluginInfoWrapper pi) {
 		PluginInfoWrapper removed = null;
 		synchronized (pluginWrappers) {
-			for(int i=0;i<pluginWrappers.size();i++) {
-				PluginInfoWrapper pi = (PluginInfoWrapper) pluginWrappers.get(i);
-				if (pi.sameThread(t)) {
-					removed = pi;
-					synchronized (toadletList) {
-						try {
-							toadletList.remove(pi.getPluginClassName());
-							Logger.normal(this, "Removed HTTP handler for /plugins/"+
-									pi.getPluginClassName()+ '/', new Exception("debug"));
-						} catch (Throwable ex) {
-							Logger.error(this, "removing Plugin", ex);
-						}
-					}
-					pluginWrappers.remove(i);
-					i--;
+			pluginWrappers.remove(pi);
+			synchronized (toadletList) {
+				try {
+					toadletList.remove(pi.getPluginClassName());
+					Logger.normal(this, "Removed HTTP handler for /plugins/"+
+							pi.getPluginClassName()+ '/', new Exception("debug"));
+				} catch (Throwable ex) {
+					Logger.error(this, "removing Plugin", ex);
 				}
 			}
 		}
@@ -301,7 +294,7 @@
 		}
 		if (found)
 			if (pi.isThreadlessPlugin())
-				removePlugin(pi.getThread());
+				removePlugin(pi);
 			else
 				pi.stopPlugin();
 	}




More information about the cvs mailing list