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 2011/11/10 18:30:01 UTC
svn commit: r1200443 - in /lucene/dev/branches/branch_3x: ./ lucene/
lucene/src/java/org/apache/lucene/search/SearcherLifetimeManager.java
Author: mikemccand
Date: Thu Nov 10 17:30:01 2011
New Revision: 1200443
URL: http://svn.apache.org/viewvc?rev=1200443&view=rev
Log:
fix thread safety issue
Modified:
lucene/dev/branches/branch_3x/ (props changed)
lucene/dev/branches/branch_3x/lucene/ (props changed)
lucene/dev/branches/branch_3x/lucene/src/java/org/apache/lucene/search/SearcherLifetimeManager.java
Modified: lucene/dev/branches/branch_3x/lucene/src/java/org/apache/lucene/search/SearcherLifetimeManager.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_3x/lucene/src/java/org/apache/lucene/search/SearcherLifetimeManager.java?rev=1200443&r1=1200442&r2=1200443&view=diff
==============================================================================
--- lucene/dev/branches/branch_3x/lucene/src/java/org/apache/lucene/search/SearcherLifetimeManager.java (original)
+++ lucene/dev/branches/branch_3x/lucene/src/java/org/apache/lucene/search/SearcherLifetimeManager.java Thu Nov 10 17:30:01 2011
@@ -250,7 +250,14 @@ public class SearcherLifetimeManager imp
* from the same background thread that opens new
* searchers. */
public synchronized void prune(Pruner pruner) throws IOException {
- final List<SearcherTracker> trackers = new ArrayList<SearcherTracker>(searchers.values());
+ // Cannot just pass searchers.values() to ArrayList ctor
+ // (not thread-safe since the values can change while
+ // ArrayList is init'ing itself); must instead iterate
+ // ourselves:
+ final List<SearcherTracker> trackers = new ArrayList<SearcherTracker>();
+ for(SearcherTracker tracker : searchers.values()) {
+ trackers.add(tracker);
+ }
Collections.sort(trackers);
final long newestSec = trackers.isEmpty() ? 0L : trackers.get(0).recordTimeSec;
for (SearcherTracker tracker: trackers) {