Author: j16sdiz
Date: 2008-04-14 13:43:23 +0000 (Mon, 14 Apr 2008)
New Revision: 19320

Modified:
   trunk/freenet/src/freenet/node/Node.java
Log:
OOMHandler for freeing cachedPubKeys


Modified: trunk/freenet/src/freenet/node/Node.java
===================================================================
--- trunk/freenet/src/freenet/node/Node.java    2008-04-14 13:43:01 UTC (rev 
19319)
+++ trunk/freenet/src/freenet/node/Node.java    2008-04-14 13:43:23 UTC (rev 
19320)
@@ -15,6 +15,7 @@
 import java.net.UnknownHostException;
 import java.security.MessageDigest;
 import java.util.Arrays;
+import java.util.Enumeration;
 import java.util.HashMap;
 import java.util.HashSet;
 import java.util.Iterator;
@@ -107,6 +108,7 @@
 import freenet.support.LRUQueue;
 import freenet.support.Logger;
 import freenet.support.OOMHandler;
+import freenet.support.OOMHook;
 import freenet.support.PooledExecutor;
 import freenet.support.ShortBuffer;
 import freenet.support.SimpleFieldSet;
@@ -124,7 +126,7 @@
 /**
  * @author amphibian
  */
-public class Node implements TimeSkewDetectorCallback, GetPubkey {
+public class Node implements TimeSkewDetectorCallback, GetPubkey, OOMHook {

        private static boolean logMINOR;

@@ -3266,4 +3268,23 @@
        public void setDispatcherHook(NodeDispatcherCallback cb) {
                this.dispatcher.setHook(cb);
        }
+
+       /**
+        * Free some memory
+        */
+       public void handleOOM() throws Exception {
+               if (cachedPubKeys != null) {
+                       Object value;
+                       do {
+                               value = cachedPubKeys.popKey();
+                       } while (value != null);
+               }
+               if (recentlyCompletedIDs != null) {
+                       synchronized (recentlyCompletedIDs) {
+                               // half it size
+                               while (recentlyCompletedIDs.size() > 
MAX_RECENTLY_COMPLETED_IDS / 2)
+                                       recentlyCompletedIDs.pop();
+                       }
+               }
+    }
 }


Reply via email to