[Red5commits] [1054] make printing of stack traces thread-safe

jbauch luke at codegent.com
Wed Jun 28 11:40:05 EDT 2006


make printing of stack traces thread-safe


Timestamp: 06/29/06 01:36:04 (less than one hour ago) 
Change: 1054 
Author: jbauch

Files (see diff or trac for details): 
java/server/trunk/src/org/red5/server/DebugPooledByteBufferAllocator.java


Trac: http://mirror1.cvsdude.com/trac/osflash/red5/changeset/1054

Index: /java/server/trunk/src/org/red5/server/DebugPooledByteBufferAllocator.java
===================================================================
--- /java/server/trunk/src/org/red5/server/DebugPooledByteBufferAllocator.java (revision 1035)
+++ /java/server/trunk/src/org/red5/server/DebugPooledByteBufferAllocator.java (revision 1054)
@@ -238,15 +238,19 @@
     
     public void resetStacks() {
-    	stacks.clear();
+    	synchronized (stacks) {
+    		stacks.clear();
+    	}
     }
     
     public void printStacks() {
-    	for (Entry<UnexpandableByteBuffer, StackTraceElement[]> entry: stacks.entrySet()) {
-    		System.out.println("Stack for buffer " + entry.getKey());
-    		StackTraceElement[] stack = entry.getValue();
-    		for (StackTraceElement element: stack) {
-    			System.out.println("  " + element);
-    		}
-    		System.out.println();
+    	synchronized (stacks) {
+	    	for (Entry<UnexpandableByteBuffer, StackTraceElement[]> entry: stacks.entrySet()) {
+	    		System.out.println("Stack for buffer " + entry.getKey());
+	    		StackTraceElement[] stack = entry.getValue();
+	    		for (StackTraceElement element: stack) {
+	    			System.out.println("  " + element);
+	    		}
+	    		System.out.println();
+	    	}
     	}
     }
@@ -277,5 +281,7 @@
         log.info("+++ "+count+" ("+buf.buf().capacity()+") "+getCodeSection() +" req: "+capacity );
         if (saveStacks)
-        	stacks.put(buf, Thread.currentThread().getStackTrace());
+        	synchronized (stacks) {
+        		stacks.put(buf, Thread.currentThread().getStackTrace());
+        	}
         
         return buf;
@@ -288,5 +294,7 @@
         log.info("--- "+count+" ("+buf.buf().capacity()+") " +getCodeSection() );
         if (saveStacks)
-        	stacks.remove(buf);
+        	synchronized (stacks) {
+        		stacks.remove(buf);
+        	}
         ExpiringStack[] bufferStacks = buf.buf().isDirect()? directBufferStacks : heapBufferStacks;
         ExpiringStack stack = bufferStacks[ getBufferStackIndex( bufferStacks, buf.buf().capacity() ) ];


Note:
Diffs are chopped if more than 30k.
This is to get past the limit on the mailing list.



More information about the Red5commits mailing list