Author: toad
Date: 2008-10-23 23:48:32 +0000 (Thu, 23 Oct 2008)
New Revision: 23066
Modified:
branches/db4o/freenet/src/freenet/support/io/SegmentedBucketChainBucket.java
Log:
Fix a deadlock
Modified:
branches/db4o/freenet/src/freenet/support/io/SegmentedBucketChainBucket.java
===================================================================
---
branches/db4o/freenet/src/freenet/support/io/SegmentedBucketChainBucket.java
2008-10-23 23:16:11 UTC (rev 23065)
+++
branches/db4o/freenet/src/freenet/support/io/SegmentedBucketChainBucket.java
2008-10-23 23:48:32 UTC (rev 23066)
@@ -258,7 +258,7 @@
private transient DBJob killMe;
- protected synchronized SegmentedChainBucketSegment makeSegment(int
index, final SegmentedChainBucketSegment oldSeg) {
+ protected SegmentedChainBucketSegment makeSegment(int index, final
SegmentedChainBucketSegment oldSeg) {
if(oldSeg != null) {
dbJobRunner.runBlocking(new DBJob() {
@@ -276,10 +276,12 @@
}, NativeThread.NORM_PRIORITY);
}
- SegmentedChainBucketSegment seg = new
SegmentedChainBucketSegment(this);
- if(segments.size() != index) throw new
IllegalArgumentException("Asked to add segment "+index+" but segments length is
"+segments.size());
- segments.add(seg);
- return seg;
+ synchronized(this) {
+ SegmentedChainBucketSegment seg = new
SegmentedChainBucketSegment(this);
+ if(segments.size() != index) throw new
IllegalArgumentException("Asked to add segment "+index+" but segments length is
"+segments.size());
+ segments.add(seg);
+ return seg;
+ }
}
public boolean isReadOnly() {