s1monw commented on a change in pull request #1601: URL: https://github.com/apache/lucene-solr/pull/1601#discussion_r443727356
########## File path: lucene/core/src/java/org/apache/lucene/index/IndexWriter.java ########## @@ -4341,27 +4342,33 @@ private synchronized void mergeFinish(MergePolicy.OneMerge merge) { } @SuppressWarnings("try") - private synchronized void closeMergeReaders(MergePolicy.OneMerge merge, boolean suppressExceptions) throws IOException { + private synchronized void closeMergeReaders(MergePolicy.OneMerge merge, boolean suppressExceptions, boolean droppedSegment) throws IOException { final boolean drop = suppressExceptions == false; - try (Closeable finalizer = () -> merge.mergeFinished(suppressExceptions == false)) { - IOUtils.applyToAll(merge.readers, sr -> { - final ReadersAndUpdates rld = getPooledInstance(sr.getOriginalSegmentInfo(), false); - // We still hold a ref so it should not have been removed: - assert rld != null; - if (drop) { - rld.dropChanges(); - } else { - rld.dropMergingUpdates(); - } - rld.release(sr); - release(rld); - if (drop) { - readerPool.drop(rld.info); - } - }); + try { + // first call mergeFinished before we potentially drop the reader and the last reference. + merge.mergeFinished(suppressExceptions == false, droppedSegment); Review comment: this adds clear semantics when we do what rather than relying on implicit ordering of things in a finalizer. ---------------------------------------------------------------- This is an automated message from the Apache Git Service. To respond to the message, please log on to GitHub and use the URL above to go to the specific comment. For queries about this service, please contact Infrastructure at: us...@infra.apache.org --------------------------------------------------------------------- To unsubscribe, e-mail: issues-unsubscr...@lucene.apache.org For additional commands, e-mail: issues-h...@lucene.apache.org