Author: toad
Date: 2007-09-08 15:34:31 +0000 (Sat, 08 Sep 2007)
New Revision: 15045

Modified:
   trunk/freenet/src/freenet/pluginmanager/PluginInfoWrapper.java
   trunk/freenet/src/freenet/pluginmanager/PluginManager.java
Log:
More refactoring:
Do the removePlugin() call in the PluginInfoWrapper.
Don't call removePlugin() twice: it gets called either after the thread-based 
plugin exits, or immediately.

Modified: trunk/freenet/src/freenet/pluginmanager/PluginInfoWrapper.java
===================================================================
--- trunk/freenet/src/freenet/pluginmanager/PluginInfoWrapper.java      
2007-09-08 15:30:10 UTC (rev 15044)
+++ trunk/freenet/src/freenet/pluginmanager/PluginInfoWrapper.java      
2007-09-08 15:34:31 UTC (rev 15045)
@@ -83,11 +83,19 @@

        /**
         * Tell the plugin to quit. Interrupt it if it's a thread-based plugin 
which
-        * might be sleeping. */
-       public void stopPlugin() {
+        * might be sleeping. Then call removePlugin() on it on the manager - 
either
+        * now, if it's threadless, or after it terminates, if it's thread 
based.
+        * @param manager The plugin manager object.
+        **/
+       public void stopPlugin(PluginManager manager) {
                plug.terminate();
-               if(thread != null)
+               if(thread != null) {
                        thread.interrupt();
+                       // Will be removed when the thread exits.
+               } else {
+                       // Remove immediately
+                       manager.removePlugin(this);
+               }
        }

        public boolean isPproxyPlugin() {

Modified: trunk/freenet/src/freenet/pluginmanager/PluginManager.java
===================================================================
--- trunk/freenet/src/freenet/pluginmanager/PluginManager.java  2007-09-08 
15:30:10 UTC (rev 15044)
+++ trunk/freenet/src/freenet/pluginmanager/PluginManager.java  2007-09-08 
15:34:31 UTC (rev 15045)
@@ -291,7 +291,7 @@
                        }
                }
                if (found) {
-                       pi.stopPlugin();
+                       pi.stopPlugin(this);
                        removePlugin(pi);
                }
        }


Reply via email to