Author: toad
Date: 2009-01-30 18:38:35 +0000 (Fri, 30 Jan 2009)
New Revision: 25407

Modified:
   branches/db4o/freenet/src/freenet/client/FailureCodeTracker.java
Log:
Lazily init the hashmap in FailureCodeTracker


Modified: branches/db4o/freenet/src/freenet/client/FailureCodeTracker.java
===================================================================
--- branches/db4o/freenet/src/freenet/client/FailureCodeTracker.java    
2009-01-30 18:35:33 UTC (rev 25406)
+++ branches/db4o/freenet/src/freenet/client/FailureCodeTracker.java    
2009-01-30 18:38:35 UTC (rev 25407)
@@ -57,9 +57,10 @@
                int x;
        }
 
-       final HashMap map = new HashMap();
+       private HashMap map;
 
        public synchronized void inc(int k) {
+               if(map == null) map = new HashMap();
                Integer key = k;
                Item i = (Item) map.get(key);
                if(i == null)
@@ -69,6 +70,7 @@
        }
 
        public synchronized void inc(Integer k, int val) {
+               if(map == null) map = new HashMap();
                Integer key = k;
                Item i = (Item) map.get(key);
                if(i == null)
@@ -78,6 +80,7 @@
        }
        
        public synchronized String toVerboseString() {
+               if(map == null) return super.toString()+":empty";
                StringBuilder sb = new StringBuilder();
                Collection values = map.keySet();
                Iterator i = values.iterator();
@@ -95,6 +98,7 @@
 
        @Override
        public synchronized String toString() {
+               if(map == null) return super.toString()+":empty";
                StringBuilder sb = new StringBuilder(super.toString());
                sb.append(':');
                if(map.size() == 0) sb.append("empty");
@@ -114,6 +118,8 @@
         * Merge codes from another tracker into this one.
         */
        public synchronized FailureCodeTracker merge(FailureCodeTracker source) 
{
+               if(source.map == null) return this;
+               if(map == null) map = new HashMap();
                Iterator keys = source.map.keySet().iterator();
                while(keys.hasNext()) {
                        Integer k = (Integer) keys.next();
@@ -139,6 +145,7 @@
        /** Copy verbosely to a SimpleFieldSet */
        public synchronized SimpleFieldSet toFieldSet(boolean verbose) {
                SimpleFieldSet sfs = new SimpleFieldSet(false);
+               if(map != null) {
                Iterator keys = map.keySet().iterator();
                while(keys.hasNext()) {
                        Integer k = (Integer) keys.next();
@@ -151,6 +158,7 @@
                                                insert ? 
InsertException.getMessage(code) : FetchException.getMessage(code));
                        sfs.put(Integer.toString(code)+".Count", item.x);
                }
+               }
                return sfs;
        }
 
@@ -163,6 +171,7 @@
        }
 
        public synchronized boolean isFatal(boolean insert) {
+               if(map == null) return false;
                Iterator i = map.keySet().iterator();
                while(i.hasNext()) {
                        Integer code = (Integer) i.next();
@@ -183,27 +192,27 @@
                inc(e.getMode());
        }
 
-       public boolean isEmpty() {
-               return map.isEmpty();
+       public synchronized boolean isEmpty() {
+               return map == null || map.isEmpty();
        }
 
        public void removeFrom(ObjectContainer container) {
                Item[] items;
                Integer[] ints;
                synchronized(this) {
-                       items = (Item[]) map.values().toArray(new 
Item[map.size()]);
-                       ints = (Integer[]) map.keySet().toArray(new 
Integer[map.size()]);
-                       map.clear();
+                       items = map == null ? null : (Item[]) 
map.values().toArray(new Item[map.size()]);
+                       ints = map == null ? null : (Integer[]) 
map.keySet().toArray(new Integer[map.size()]);
+                       if(map == null) map.clear();
                }
                for(int i=0;i<items.length;i++) {
                        container.delete(items[i]);
                        container.delete(ints[i]);
                }
-               container.delete(map);
+               if(map != null) container.delete(map);
                container.delete(this);
        }
        
        public void objectOnActivate(ObjectContainer container) {
-               container.activate(map, 5);
+               if(map != null) container.activate(map, 5);
        }
 }

_______________________________________________
cvs mailing list
[email protected]
http://emu.freenetproject.org/cgi-bin/mailman/listinfo/cvs

Reply via email to