Author: toad
Date: 2007-07-14 15:08:02 +0000 (Sat, 14 Jul 2007)
New Revision: 14111
Modified:
trunk/freenet/src/freenet/config/PersistentConfig.java
Log:
Reduce locking
Modified: trunk/freenet/src/freenet/config/PersistentConfig.java
===================================================================
--- trunk/freenet/src/freenet/config/PersistentConfig.java 2007-07-14
14:53:29 UTC (rev 14110)
+++ trunk/freenet/src/freenet/config/PersistentConfig.java 2007-07-14
15:08:02 UTC (rev 14111)
@@ -39,12 +39,16 @@
return
exportFieldSet(Config.CONFIG_REQUEST_TYPE_CURRENT_SETTINGS, withDefaults);
}
- public synchronized SimpleFieldSet exportFieldSet(int
configRequestType, boolean withDefaults) {
+ public SimpleFieldSet exportFieldSet(int configRequestType, boolean
withDefaults) {
SimpleFieldSet fs = new SimpleFieldSet(true);
- Iterator configsIterator = configsByPrefix.keySet().iterator();
+ SubConfig[] configs;
+ synchronized(this) {
+ // FIXME maybe keep a cache of this?
+ configs = (SubConfig[])
configsByPrefix.keySet().toArray(new SubConfig[configsByPrefix.size()]);
+ }
SubConfig current;
- while (configsIterator.hasNext()) {
- current = (SubConfig)
configsByPrefix.get(configsIterator.next());
+ for(int i=0;i<configs.length;i++) {
+ current = configs[i];
SimpleFieldSet scfs =
current.exportFieldSet(configRequestType, withDefaults);
fs.tput(current.prefix, scfs);
}