mirror of https://github.com/apache/lucene.git
LUCENE-4245: use IOUtils to close everything in finally block
git-svn-id: https://svn.apache.org/repos/asf/lucene/dev/trunk@1364931 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
845a3c3d60
commit
2b53e08898
|
@ -893,45 +893,46 @@ public class IndexWriter implements Closeable, TwoPhaseCommit {
|
|||
}
|
||||
|
||||
} finally {
|
||||
// clean up merge scheduler in all cases, although flushing may have failed:
|
||||
interrupted = Thread.interrupted();
|
||||
|
||||
if (waitForMerges) {
|
||||
try {
|
||||
// Give merge scheduler last chance to run, in case
|
||||
// any pending merges are waiting:
|
||||
mergeScheduler.merge(this);
|
||||
} catch (ThreadInterruptedException tie) {
|
||||
// ignore any interruption, does not matter
|
||||
interrupted = true;
|
||||
if (infoStream.isEnabled("IW")) {
|
||||
infoStream.message("IW", "interrupted while waiting for final merges");
|
||||
}
|
||||
}
|
||||
}
|
||||
try {
|
||||
// clean up merge scheduler in all cases, although flushing may have failed:
|
||||
interrupted = Thread.interrupted();
|
||||
|
||||
mergePolicy.close();
|
||||
|
||||
synchronized(this) {
|
||||
for (;;) {
|
||||
if (waitForMerges) {
|
||||
try {
|
||||
finishMerges(waitForMerges && !interrupted);
|
||||
break;
|
||||
// Give merge scheduler last chance to run, in case
|
||||
// any pending merges are waiting:
|
||||
mergeScheduler.merge(this);
|
||||
} catch (ThreadInterruptedException tie) {
|
||||
// by setting the interrupted status, the
|
||||
// next call to finishMerges will pass false,
|
||||
// so it will not wait
|
||||
// ignore any interruption, does not matter
|
||||
interrupted = true;
|
||||
if (infoStream.isEnabled("IW")) {
|
||||
infoStream.message("IW", "interrupted while waiting for merges to finish");
|
||||
infoStream.message("IW", "interrupted while waiting for final merges");
|
||||
}
|
||||
}
|
||||
}
|
||||
stopMerges = true;
|
||||
|
||||
synchronized(this) {
|
||||
for (;;) {
|
||||
try {
|
||||
finishMerges(waitForMerges && !interrupted);
|
||||
break;
|
||||
} catch (ThreadInterruptedException tie) {
|
||||
// by setting the interrupted status, the
|
||||
// next call to finishMerges will pass false,
|
||||
// so it will not wait
|
||||
interrupted = true;
|
||||
if (infoStream.isEnabled("IW")) {
|
||||
infoStream.message("IW", "interrupted while waiting for merges to finish");
|
||||
}
|
||||
}
|
||||
}
|
||||
stopMerges = true;
|
||||
}
|
||||
|
||||
} finally {
|
||||
// shutdown policy, scheduler and all threads (this call is not interruptible):
|
||||
IOUtils.closeWhileHandlingException(mergePolicy, mergeScheduler);
|
||||
}
|
||||
|
||||
// shutdown scheduler and all threads (this call is not interruptible):
|
||||
mergeScheduler.close();
|
||||
}
|
||||
|
||||
if (infoStream.isEnabled("IW")) {
|
||||
|
|
Loading…
Reference in New Issue