You are viewing a plain text version of this content. The canonical link for it is here.
Posted to java-commits@lucene.apache.org by mi...@apache.org on 2010/10/31 15:05:34 UTC
svn commit: r1029348 -
/lucene/java/branches/lucene_2_9/src/java/org/apache/lucene/index/TermsHash.java
Author: mikemccand
Date: Sun Oct 31 14:05:34 2010
New Revision: 1029348
URL: http://svn.apache.org/viewvc?rev=1029348&view=rev
Log:
LUCENE-2730: fix intermittent deadlock cases, take 2
Modified:
lucene/java/branches/lucene_2_9/src/java/org/apache/lucene/index/TermsHash.java
Modified: lucene/java/branches/lucene_2_9/src/java/org/apache/lucene/index/TermsHash.java
URL: http://svn.apache.org/viewvc/lucene/java/branches/lucene_2_9/src/java/org/apache/lucene/index/TermsHash.java?rev=1029348&r1=1029347&r2=1029348&view=diff
==============================================================================
--- lucene/java/branches/lucene_2_9/src/java/org/apache/lucene/index/TermsHash.java (original)
+++ lucene/java/branches/lucene_2_9/src/java/org/apache/lucene/index/TermsHash.java Sun Oct 31 14:05:34 2010
@@ -160,24 +160,31 @@ final class TermsHash extends InvertedDo
nextTermsHash.flush(nextThreadsAndFields, state);
}
- synchronized public boolean freeRAM() {
+ public boolean freeRAM() {
if (!trackAllocations)
return false;
boolean any;
- final int numToFree;
- if (postingsFreeCount >= postingsFreeChunk)
- numToFree = postingsFreeChunk;
- else
- numToFree = postingsFreeCount;
- any = numToFree > 0;
+ long bytesFreed = 0;
+ synchronized(this) {
+ final int numToFree;
+ if (postingsFreeCount >= postingsFreeChunk)
+ numToFree = postingsFreeChunk;
+ else
+ numToFree = postingsFreeCount;
+ any = numToFree > 0;
+ if (any) {
+ Arrays.fill(postingsFreeList, postingsFreeCount-numToFree, postingsFreeCount, null);
+ postingsFreeCount -= numToFree;
+ postingsAllocCount -= numToFree;
+ bytesFreed = -numToFree * bytesPerPosting;
+ any = true;
+ }
+ }
+
if (any) {
- Arrays.fill(postingsFreeList, postingsFreeCount-numToFree, postingsFreeCount, null);
- postingsFreeCount -= numToFree;
- postingsAllocCount -= numToFree;
- docWriter.bytesAllocated(-numToFree * bytesPerPosting);
- any = true;
+ docWriter.bytesAllocated(bytesFreed);
}
if (nextTermsHash != null)