Author: toad
Date: 2007-09-08 15:11:37 +0000 (Sat, 08 Sep 2007)
New Revision: 15038

Modified:
   trunk/freenet/src/freenet/pluginmanager/PluginManager.java
Log:
Remove cumbersome data structure: keep a simple vector of the currently loaded 
plugins' PluginInfoWrapper's

Modified: trunk/freenet/src/freenet/pluginmanager/PluginManager.java
===================================================================
--- trunk/freenet/src/freenet/pluginmanager/PluginManager.java  2007-09-08 
14:57:49 UTC (rev 15037)
+++ trunk/freenet/src/freenet/pluginmanager/PluginManager.java  2007-09-08 
15:11:37 UTC (rev 15038)
@@ -48,8 +48,8 @@
         *
         */

-       private HashMap toadletList;
-       private HashMap pluginInfo;
+       private final HashMap toadletList;
+       private final Vector/*<PluginInfoWrapper>*/ pluginWrappers;
        private PluginRespirator pluginRespirator = null;
        private final Node node;
        private final NodeClientCore core;
@@ -57,8 +57,8 @@
        private boolean logMINOR;

        public PluginManager(Node node) {
-               pluginInfo = new HashMap();
                toadletList = new HashMap();
+               pluginWrappers = new Vector();
                this.node = node;
                this.core = node.clientCore;
                logMINOR = Logger.shouldLog(Logger.MINOR, this);
@@ -132,8 +132,8 @@
                                
node.ipDetector.registerPortForwardPlugin((FredPluginPortForward) plug);
                        }

-                       synchronized (pluginInfo) {
-                               pluginInfo.put(pi.getThreadName(), pi);
+                       synchronized (pluginWrappers) {
+                               pluginWrappers.add(pi);
                        }
                        Logger.normal(this, "Plugin loaded: " + filename);
                } catch (PluginNotFoundException e) {
@@ -173,14 +173,12 @@
         * @param t
         */
        public void removePlugin(Thread t) {
-               Object removeKey = null;
-               synchronized (pluginInfo) {
-                       Iterator it = pluginInfo.keySet().iterator();
-                       while (it.hasNext() && (removeKey == null)) {
-                               Object key = it.next();
-                               PluginInfoWrapper pi = (PluginInfoWrapper) 
pluginInfo.get(key);
+               PluginInfoWrapper removed = null;
+               synchronized (pluginWrappers) {
+                       for(int i=0;i<pluginWrappers.size();i++) {
+                               PluginInfoWrapper pi = (PluginInfoWrapper) 
pluginWrappers.get(i);
                                if (pi.sameThread(t)) {
-                                       removeKey = key;
+                                       removed = pi;
                                        synchronized (toadletList) {
                                                try {
                                                        
toadletList.remove(pi.getPluginClassName());
@@ -190,13 +188,12 @@
                                                        Logger.error(this, 
"removing Plugin", ex);
                                                }
                                        }
+                                       pluginWrappers.remove(i);
+                                       i--;
                                }
                        }
-
-                       if (removeKey != null)
-                               pluginInfo.remove(removeKey);
                }
-               if(removeKey != null)
+               if(removed != null)
                        core.storeConfig();
        }

@@ -241,10 +238,9 @@

        public String dumpPlugins() {
                StringBuffer out= new StringBuffer();
-               synchronized (pluginInfo) {
-                       Iterator it = pluginInfo.keySet().iterator();
-                       while (it.hasNext()) {
-                               PluginInfoWrapper pi = (PluginInfoWrapper) 
pluginInfo.get(it.next());
+               synchronized (pluginWrappers) {
+                       for(int i=0;i<pluginWrappers.size();i++) {
+                               PluginInfoWrapper pi = (PluginInfoWrapper) 
pluginWrappers.get(i);
                                out.append(pi.toString());
                                out.append('\n');
                        }
@@ -254,10 +250,9 @@

        public Set getPlugins() {
                HashSet out = new HashSet();
-               synchronized (pluginInfo) {
-                       Iterator it = pluginInfo.keySet().iterator();
-                       while (it.hasNext()) {
-                               PluginInfoWrapper pi = (PluginInfoWrapper) 
pluginInfo.get(it.next());
+               synchronized (pluginWrappers) {
+                       for(int i=0;i<pluginWrappers.size();i++) {
+                               PluginInfoWrapper pi = (PluginInfoWrapper) 
pluginWrappers.get(i);
                                out.add(pi);
                        }
                }
@@ -297,10 +292,9 @@
        public void killPlugin(String name) {
                PluginInfoWrapper pi = null;
                boolean found = false;
-               synchronized (pluginInfo) {
-                       Iterator it = pluginInfo.keySet().iterator();
-                       while (it.hasNext() && !found) {
-                               pi = (PluginInfoWrapper) 
pluginInfo.get(it.next());
+               synchronized (pluginWrappers) {
+                       for(int i=0;i<pluginWrappers.size() && !found;i++) {
+                               pi = (PluginInfoWrapper) pluginWrappers.get(i);
                                if (pi.getThreadName().equals(name))
                                        found = true;
                        }


Reply via email to