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);