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:
Uwe Schindler 2012-07-24 08:09:27 +00:00
parent 845a3c3d60
commit 2b53e08898
1 changed files with 31 additions and 30 deletions

View File

@ -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")) {