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


Reply via email to