You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by mi...@apache.org on 2012/08/27 17:20:17 UTC
svn commit: r1377711 -
/lucene/dev/trunk/lucene/test-framework/src/java/org/apache/lucene/search/ShardSearchingTestBase.java
Author: mikemccand
Date: Mon Aug 27 15:20:17 2012
New Revision: 1377711
URL: http://svn.apache.org/viewvc?rev=1377711&view=rev
Log:
fix test thread safety issue
Modified:
lucene/dev/trunk/lucene/test-framework/src/java/org/apache/lucene/search/ShardSearchingTestBase.java
Modified: lucene/dev/trunk/lucene/test-framework/src/java/org/apache/lucene/search/ShardSearchingTestBase.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/test-framework/src/java/org/apache/lucene/search/ShardSearchingTestBase.java?rev=1377711&r1=1377710&r2=1377711&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/test-framework/src/java/org/apache/lucene/search/ShardSearchingTestBase.java (original)
+++ lucene/dev/trunk/lucene/test-framework/src/java/org/apache/lucene/search/ShardSearchingTestBase.java Mon Aug 27 15:20:17 2012
@@ -468,15 +468,17 @@ public abstract class ShardSearchingTest
// Get the current (fresh) searcher for this node
public ShardIndexSearcher acquire() {
- final ShardIndexSearcher s = currentShardSearcher;
- // TODO: this isn't thread safe.... in theory the
- // reader could get decRef'd to 0 before we have a
- // chance to incRef, ie if a reopen happens right
- // after the above line, this thread gets stalled, and
- // the old IR is closed. But because we use SLM in
- // this test, this will be exceptionally rare:
- s.getIndexReader().incRef();
- return s;
+ while(true) {
+ final ShardIndexSearcher s = currentShardSearcher;
+ // In theory the reader could get decRef'd to 0
+ // before we have a chance to incRef, ie if a reopen
+ // happens right after the above line, this thread
+ // gets stalled, and the old IR is closed. So we
+ // must try/retry until incRef succeeds:
+ if (s.getIndexReader().tryIncRef()) {
+ return s;
+ }
+ }
}
public void release(ShardIndexSearcher s) throws IOException {