[hibernate-commits] Hibernate SVN: r15537 - search/trunk/src/java/org/hibernate/search/filter.

hibernate-commits at lists.jboss.org hibernate-commits at lists.jboss.org
Mon Nov 10 04:25:20 EST 2008


Author: sannegrinovero
Date: 2008-11-10 04:25:20 -0500 (Mon, 10 Nov 2008)
New Revision: 15537

Modified:
   search/trunk/src/java/org/hibernate/search/filter/AndDocIdSet.java
Log:
HSEARCH-289 visibility problem in iterators initialization

Modified: search/trunk/src/java/org/hibernate/search/filter/AndDocIdSet.java
===================================================================
--- search/trunk/src/java/org/hibernate/search/filter/AndDocIdSet.java	2008-11-09 16:23:24 UTC (rev 15536)
+++ search/trunk/src/java/org/hibernate/search/filter/AndDocIdSet.java	2008-11-10 09:25:20 UTC (rev 15537)
@@ -29,8 +29,8 @@
 		this.maxDocNumber = maxDocs;
 	}
 	
-	private synchronized void buildBitset() throws IOException {
-		if ( docIdBitSet != null ) return; // double check for concurrent initialization
+	private synchronized OpenBitSet buildBitset() throws IOException {
+		if ( docIdBitSet != null ) return docIdBitSet; // double check for concurrent initialization
 		//TODO if all andedDocIdSets are actually DocIdBitSet, use their internal BitSet instead of next algo.
 		//TODO if some andedDocIdSets are DocIdBitSet, merge them first.
 		int size = andedDocIdSets.size();
@@ -49,6 +49,7 @@
 			bitSet = new OpenBitSet(); //TODO a less expensive "empty"
 		}
 		docIdBitSet = bitSet;
+		return bitSet;
 	}
 
 	private final void markBitSetOnAgree(final DocIdSetIterator[] iterators, final OpenBitSet result) throws IOException {
@@ -132,10 +133,9 @@
 			return iterator.skipTo( target );
 		}
 		
-		private void ensureInitialized() throws IOException {
-			if ( docIdBitSet == null ) buildBitset();
+		private final void ensureInitialized() throws IOException {
 			if ( iterator == null ) {
-				iterator = docIdBitSet.iterator();
+				iterator = buildBitset().iterator();
 			}
 		}
 		




More information about the hibernate-commits mailing list