Author: j16sdiz
Date: 2008-09-21 07:53:48 +0000 (Sun, 21 Sep 2008)
New Revision: 22728

Modified:
   trunk/freenet/src/freenet/support/BloomFilter.java
Log:
lock forked filter on merging

Modified: trunk/freenet/src/freenet/support/BloomFilter.java
===================================================================
--- trunk/freenet/src/freenet/support/BloomFilter.java  2008-09-21 07:45:24 UTC 
(rev 22727)
+++ trunk/freenet/src/freenet/support/BloomFilter.java  2008-09-21 07:53:48 UTC 
(rev 22728)
@@ -5,6 +5,7 @@
 import java.nio.ByteBuffer;
 import java.nio.MappedByteBuffer;
 import java.util.Random;
+import java.util.concurrent.locks.Lock;
 import java.util.concurrent.locks.ReadWriteLock;
 import java.util.concurrent.locks.ReentrantReadWriteLock;

@@ -119,14 +120,20 @@
                        if (forkedFilter == null)
                                return;

-                       filter.position(0);
-                       forkedFilter.filter.position(0);
+                       Lock forkedLock = forkedFilter.lock.writeLock();
+                       forkedLock.lock();
+                       try {
+                               filter.position(0);
+                               forkedFilter.filter.position(0);

-                       filter.put(forkedFilter.filter);
+                               filter.put(forkedFilter.filter);

-                       filter.position(0);
-                       forkedFilter.finalize();
-                       forkedFilter = null;
+                               filter.position(0);
+                               forkedFilter.finalize();
+                               forkedFilter = null;
+                       } finally {
+                               forkedLock.unlock();
+                       }
                } finally {
                        lock.writeLock().unlock();
                }


Reply via email to