Author: toad
Date: 2006-12-11 20:40:44 +0000 (Mon, 11 Dec 2006)
New Revision: 11344

Modified:
   trunk/freenet/src/freenet/node/PacketSender.java
Log:
Try to get more information on an out-of-threads crash.

Modified: trunk/freenet/src/freenet/node/PacketSender.java
===================================================================
--- trunk/freenet/src/freenet/node/PacketSender.java    2006-12-11 20:03:25 UTC 
(rev 11343)
+++ trunk/freenet/src/freenet/node/PacketSender.java    2006-12-11 20:40:44 UTC 
(rev 11344)
@@ -122,20 +122,32 @@
                logMINOR = Logger.shouldLog(Logger.MINOR, this);
                 realRun();
             } catch (OutOfMemoryError e) {
-               Runtime r = Runtime.getRuntime();
-               long usedAtStart = r.totalMemory() - r.freeMemory();
-               System.gc();
-               System.runFinalization();
-               System.gc();
-               System.runFinalization();
-               System.err.println(e.getClass());
-               System.err.println(e.getMessage());
-               e.printStackTrace();
-               long usedNow = r.totalMemory() - r.freeMemory();
-               Logger.error(this, "Caught "+e, e);
-               Logger.error(this, "Used: "+usedAtStart+" now "+usedNow);
+               Runtime r = null;
+               try {
+                       r = Runtime.getRuntime();
+                       long usedAtStart = r.totalMemory() - r.freeMemory();
+                       System.gc();
+                       System.runFinalization();
+                       System.gc();
+                       System.runFinalization();
+                       System.err.println(e.getClass());
+                       System.err.println(e.getMessage());
+                       e.printStackTrace();
+                       long usedNow = r.totalMemory() - r.freeMemory();
+                       Logger.error(this, "Caught "+e, e);
+                       Logger.error(this, "Used: "+usedAtStart+" now 
"+usedNow);
+               } catch (Throwable t) {
+                       // Try without GCing, it might be a thread error; GCing 
creates a thread
+                       System.err.println("Caught handling OOM "+e+" : "+t);
+                       e.printStackTrace();
+                       if(r != null)
+                               System.err.println("Memory: total 
"+r.totalMemory()+" free "+r.freeMemory()+" max "+r.maxMemory());
+                       WrapperManager.requestThreadDump(); // Will probably 
crash, but never mind...
+               }
             } catch (Throwable t) {
                 Logger.error(this, "Caught in PacketSender: "+t, t);
+                System.err.println("Caught in PacketSender: "+t);
+                t.printStackTrace();
             }
         }
     }


Reply via email to