From d3478d38fa2b911cddaec9c1ca513bb93bda99c3 Mon Sep 17 00:00:00 2001 From: Michael McCandless Date: Mon, 8 Mar 2010 11:08:26 +0000 Subject: [PATCH] LUCENE-2300: don't pool readers on external directories when IW git-svn-id: https://svn.apache.org/repos/asf/lucene/java/trunk@920270 13f79535-47bb-0310-9956-ffa450edef68 --- src/java/org/apache/lucene/index/IndexWriter.java | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/src/java/org/apache/lucene/index/IndexWriter.java b/src/java/org/apache/lucene/index/IndexWriter.java index 3c4a516c656..28238dd7fcb 100644 --- a/src/java/org/apache/lucene/index/IndexWriter.java +++ b/src/java/org/apache/lucene/index/IndexWriter.java @@ -477,7 +477,8 @@ public class IndexWriter implements Closeable { assert !pooled | readerMap.get(sr.getSegmentInfo()) == sr; - // Drop caller's ref + // Drop caller's ref; for an external reader (not + // pooled), this decRef will close it sr.decRef(); if (pooled && (drop || (!poolReaders && sr.getRefCount() == 1))) { @@ -613,7 +614,11 @@ public class IndexWriter implements Closeable { // synchronized // Returns a ref, which we xfer to readerMap: sr = SegmentReader.get(false, info.dir, info, readBufferSize, doOpenStores, termsIndexDivisor); - readerMap.put(info, sr); + + if (info.dir == directory) { + // Only pool if reader is not external + readerMap.put(info, sr); + } } else { if (doOpenStores) { sr.openDocStores(); @@ -630,7 +635,10 @@ public class IndexWriter implements Closeable { } // Return a ref to our caller - sr.incRef(); + if (info.dir == directory) { + // Only incRef if we pooledd (reader is not external) + sr.incRef(); + } return sr; }