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();
}