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