You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@activemq.apache.org by ch...@apache.org on 2008/05/01 18:03:00 UTC

svn commit: r652562 - /activemq/trunk/activemq-core/src/main/java/org/apache/activemq/kaha/impl/async/DataFileAppender.java

Author: chirino
Date: Thu May  1 09:02:59 2008
New Revision: 652562

URL: http://svn.apache.org/viewvc?rev=652562&view=rev
Log:
Fix threading issue which was causing a memory leak. Basically the writes were getting added to the in flight map
after they were enqueued to get written and in that time span they could be been processed and the remove() would occur before the add witch caused the leak.


Modified:
    activemq/trunk/activemq-core/src/main/java/org/apache/activemq/kaha/impl/async/DataFileAppender.java

Modified: activemq/trunk/activemq-core/src/main/java/org/apache/activemq/kaha/impl/async/DataFileAppender.java
URL: http://svn.apache.org/viewvc/activemq/trunk/activemq-core/src/main/java/org/apache/activemq/kaha/impl/async/DataFileAppender.java?rev=652562&r1=652561&r2=652562&view=diff
==============================================================================
--- activemq/trunk/activemq-core/src/main/java/org/apache/activemq/kaha/impl/async/DataFileAppender.java (original)
+++ activemq/trunk/activemq-core/src/main/java/org/apache/activemq/kaha/impl/async/DataFileAppender.java Thu May  1 09:02:59 2008
@@ -167,6 +167,9 @@
         synchronized (this) {
             // Find the position where this item will land at.
             DataFile dataFile = dataManager.allocateLocation(location);
+            if( !sync ) {
+                inflightWrites.put(new WriteKey(location), write);
+            }
             batch = enqueue(dataFile, write);
         }
         location.setLatch(batch.latch);
@@ -176,8 +179,6 @@
             } catch (InterruptedException e) {
                 throw new InterruptedIOException();
             }
-        } else {
-            inflightWrites.put(new WriteKey(location), write);
         }
 
         return location;
@@ -201,10 +202,10 @@
         synchronized (this) {
             // Find the position where this item will land at.
             DataFile dataFile = dataManager.allocateLocation(location);
+            inflightWrites.put(new WriteKey(location), write);
             batch = enqueue(dataFile, write);
         }
         location.setLatch(batch.latch);
-        inflightWrites.put(new WriteKey(location), write);
 
         return location;
 	}