Author: toad
Date: 2007-09-08 16:03:36 +0000 (Sat, 08 Sep 2007)
New Revision: 15050

Modified:
   trunk/freenet/src/freenet/pluginmanager/PluginHandler.java
   trunk/freenet/src/freenet/pluginmanager/PluginInfoWrapper.java
   trunk/freenet/src/freenet/pluginmanager/PluginManager.java
Log:
Move unregister into PluginInfoWrapper

Modified: trunk/freenet/src/freenet/pluginmanager/PluginHandler.java
===================================================================
--- trunk/freenet/src/freenet/pluginmanager/PluginHandler.java  2007-09-08 
15:58:42 UTC (rev 15049)
+++ trunk/freenet/src/freenet/pluginmanager/PluginHandler.java  2007-09-08 
16:03:36 UTC (rev 15050)
@@ -81,7 +81,7 @@
                                        System.err.println("Caught Throwable 
while running plugin: "+t);
                                        t.printStackTrace();
                                }
-                               pm.unregisterPlugin(pi); // If not already 
unregistered
+                               pi.unregister(pm); // 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:58:42 UTC (rev 15049)
+++ trunk/freenet/src/freenet/pluginmanager/PluginInfoWrapper.java      
2007-09-08 16:03:36 UTC (rev 15050)
@@ -22,6 +22,7 @@
        private String filename;
        private HashSet toadletLinks=new HashSet();
        private boolean stopping = false;
+       private boolean unregistered = false;
        //public String 

        public PluginInfoWrapper(FredPlugin plug, String filename) {
@@ -93,7 +94,7 @@
         * or else a value in milliseconds.
         **/
        public void stopPlugin(PluginManager manager, int maxWaitTime) {
-               manager.unregisterPlugin(this);
+               unregister(manager);
                plug.terminate();
                stopping = true;
                if(thread != null) {
@@ -118,6 +119,17 @@
                }
        }

+       /**
+        * Unregister the plugin from any user interface or other callbacks it 
may be
+        * registered with. Call this before manager.removePlugin(): the plugin 
becomes
+        * unvisitable immediately, but it may take time for it to shut down 
completely.
+        */
+       void unregister(PluginManager manager) {
+               if(unregistered) return;
+               unregistered = true;
+               manager.unregisterPluginToadlet(this);
+       }
+
        public boolean isPproxyPlugin() {
                return isPproxyPlugin;
        }

Modified: trunk/freenet/src/freenet/pluginmanager/PluginManager.java
===================================================================
--- trunk/freenet/src/freenet/pluginmanager/PluginManager.java  2007-09-08 
15:58:42 UTC (rev 15049)
+++ trunk/freenet/src/freenet/pluginmanager/PluginManager.java  2007-09-08 
16:03:36 UTC (rev 15050)
@@ -177,12 +177,7 @@
                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) {
+       public void unregisterPluginToadlet(PluginInfoWrapper pi) {
                synchronized (toadletList) {
                        try {
                                toadletList.remove(pi.getPluginClassName());
@@ -192,7 +187,6 @@
                                Logger.error(this, "removing Plugin", ex);
                        }
                }
-               core.storeConfig();
        }

        public void addToadletSymlinks(PluginInfoWrapper pi) {


Reply via email to