Author: nextgens
Date: 2006-09-08 20:58:42 +0000 (Fri, 08 Sep 2006)
New Revision: 10434

Modified:
   trunk/freenet/src/freenet/config/StringArrOption.java
   trunk/freenet/src/freenet/node/Node.java
   trunk/freenet/src/freenet/node/NodeClientCore.java
   trunk/freenet/src/freenet/plugin/PluginManager.java
Log:
Ensure the node's config file is only written once, fix the plugin loading 
problem on pluginmanager2

Modified: trunk/freenet/src/freenet/config/StringArrOption.java
===================================================================
--- trunk/freenet/src/freenet/config/StringArrOption.java       2006-09-08 
19:52:10 UTC (rev 10433)
+++ trunk/freenet/src/freenet/config/StringArrOption.java       2006-09-08 
20:58:42 UTC (rev 10434)
@@ -73,7 +73,7 @@
        }

        public boolean isDefault() {
-               return currentValue.equals(defaultValue);
+               return currentValue == null ? false : 
currentValue.equals(defaultValue);
        }

        public void setDefault() {

Modified: trunk/freenet/src/freenet/node/Node.java
===================================================================
--- trunk/freenet/src/freenet/node/Node.java    2006-09-08 19:52:10 UTC (rev 
10433)
+++ trunk/freenet/src/freenet/node/Node.java    2006-09-08 20:58:42 UTC (rev 
10434)
@@ -1275,6 +1275,7 @@
                Logger.normal(this, "Initializing Plugin Manager");
                System.out.println("Initializing Plugin Manager");
                pluginManager = new PluginManager(this);
+               pluginManager2 = new freenet.plugin.PluginManager(this);

                FetcherContext ctx = 
clientCore.makeClient((short)0).getFetcherContext();

@@ -1366,8 +1367,6 @@
                System.out.println("FNP port is on "+bindto+":"+portNumber);
                // Start services

-               pluginManager2 = new freenet.plugin.PluginManager(this);
-               
 //             SubConfig pluginManagerConfig = new SubConfig("pluginmanager3", 
config);
 //             pluginManager3 = new 
freenet.plugin_new.PluginManager(pluginManagerConfig);


Modified: trunk/freenet/src/freenet/node/NodeClientCore.java
===================================================================
--- trunk/freenet/src/freenet/node/NodeClientCore.java  2006-09-08 19:52:10 UTC 
(rev 10433)
+++ trunk/freenet/src/freenet/node/NodeClientCore.java  2006-09-08 20:58:42 UTC 
(rev 10434)
@@ -59,6 +59,9 @@
        private final HealingQueue healingQueue;
        /** Must be included as a hidden field in order for any dangerous HTTP 
operation to complete successfully. */
        public final String formPassword;
+       
+       private volatile Object writeSync = new Object();
+       private boolean isWritingConfig = false;

        File downloadDir;
        final FilenameGenerator tempFilenameGenerator;
@@ -738,11 +741,23 @@

        public void storeConfig() {
                Logger.normal(this, "Writing config", new Exception("debug"));
-               node.ps.queueTimedJob(new Runnable() {
-                       public void run() {
-                               node.config.store();
-                       }
-               }, 0);
+               synchronized (writeSync) {
+                       if(isWritingConfig) return;
+                       isWritingConfig = true;
+               
+                       node.ps.queueTimedJob(new Runnable() {
+                               public void run() {
+                                       try{
+                                               while(!node.isHasStarted())
+                                                       Thread.sleep(1000);
+                                       }catch (InterruptedException e) {}
+                                       node.config.store();
+                                       synchronized (writeSync) {
+                                               isWritingConfig = false;
+                                       }
+                               }
+                       }, 0);
+               }
        }

        public boolean isTestnetEnabled() {

Modified: trunk/freenet/src/freenet/plugin/PluginManager.java
===================================================================
--- trunk/freenet/src/freenet/plugin/PluginManager.java 2006-09-08 19:52:10 UTC 
(rev 10433)
+++ trunk/freenet/src/freenet/plugin/PluginManager.java 2006-09-08 20:58:42 UTC 
(rev 10434)
@@ -45,7 +45,7 @@
                this.node = node;

                config = new SubConfig("pluginmanager2", node.config);
-               config.register("loadedPlugins", null, 9, true, false, "Plugins 
to load on start up", "A list of plugins that are started when the node 
starts", new StringArrCallback() {
+               config.register("loadedPlugins", new String[0], 9, true, true, 
"Plugins to load on start up", "A list of plugins that are started when the 
node starts", new StringArrCallback() {

                        /**
                         * Returns the current value of this option.
@@ -54,6 +54,7 @@
                         * @return The current value of this option
                         */
                        public String get() {
+                               if(plugins.size() == 0) return null;
                                StringBuffer optionValue = new StringBuffer();
                                synchronized (syncObject) {
                                        Iterator pluginIterator = 
plugins.iterator();
@@ -79,12 +80,13 @@
                         *             is not valid
                         */
                        public void set(String val) throws 
InvalidConfigValueException {
-                               throw new InvalidConfigValueException("Start or 
stop plugins to change this value.");
+                               if(val == null || get().contains(val)) return;
+                               addPlugin(val, true);
                        };
                });

                String[] loadedPluginNames = 
config.getStringArr("loadedPlugins");
-               if (loadedPluginNames != null) {
+               if (loadedPluginNames != null && loadedPluginNames.length > 0) {
                        for (int pluginIndex = 0, pluginCount = 
loadedPluginNames.length; pluginIndex < pluginCount; pluginIndex++) {
                                String pluginName = 
StringArrOption.decode(loadedPluginNames[pluginIndex]);
                                try {
@@ -130,12 +132,21 @@
         *            The name of the plugin
         */
        public void addPlugin(String pluginName, boolean store) throws 
IllegalArgumentException {
-               Plugin newPlugin = createPlugin(pluginName);
+               final Plugin newPlugin = createPlugin(pluginName);
                if (newPlugin == null) {
                        throw new IllegalArgumentException();
                }
                newPlugin.setPluginManager(this);
-               newPlugin.startPlugin();
+               node.ps.queueTimedJob(new Runnable() {
+                       public void run() {
+                               try{
+                                       while(!node.isHasStarted())
+                                               Thread.sleep(1000);
+                               }catch (InterruptedException e) {}
+                               newPlugin.startPlugin();
+                       }
+               }, 0);
+               
                synchronized (syncObject) {
                        plugins.add(newPlugin);
                }
@@ -178,7 +189,7 @@
        private Plugin createPlugin(String pluginName) {
                int p = pluginName.indexOf('@');
                String pluginSource = null;
-
+               
                /* split up */
                if (p > -1) {
                        pluginSource = pluginName.substring(p + 1);


Reply via email to