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() {


Reply via email to