[SPARK-26265][CORE][FOLLOWUP] Put freePage into a finally block
## What changes were proposed in this pull request? Based on the [comment](https://github.com/apache/spark/pull/23272#discussion_r240735509), it seems to be better to put `freePage` into a `finally` block. This patch as a follow-up to do so. ## How was this patch tested? Existing tests. Closes #23294 from viirya/SPARK-26265-followup. Authored-by: Liang-Chi Hsieh <viirya@gmail.com> Signed-off-by: Hyukjin Kwon <gurwls223@apache.org>
This commit is contained in:
parent
d25e443eec
commit
1b604c1fd0
|
@ -262,36 +262,39 @@ public final class BytesToBytesMap extends MemoryConsumer {
|
|||
// reference to the page to free and free it after releasing the lock of `MapIterator`.
|
||||
MemoryBlock pageToFree = null;
|
||||
|
||||
synchronized (this) {
|
||||
int nextIdx = dataPages.indexOf(currentPage) + 1;
|
||||
if (destructive && currentPage != null) {
|
||||
dataPages.remove(currentPage);
|
||||
pageToFree = currentPage;
|
||||
nextIdx --;
|
||||
}
|
||||
if (dataPages.size() > nextIdx) {
|
||||
currentPage = dataPages.get(nextIdx);
|
||||
pageBaseObject = currentPage.getBaseObject();
|
||||
offsetInPage = currentPage.getBaseOffset();
|
||||
recordsInPage = UnsafeAlignedOffset.getSize(pageBaseObject, offsetInPage);
|
||||
offsetInPage += UnsafeAlignedOffset.getUaoSize();
|
||||
} else {
|
||||
currentPage = null;
|
||||
if (reader != null) {
|
||||
handleFailedDelete();
|
||||
try {
|
||||
synchronized (this) {
|
||||
int nextIdx = dataPages.indexOf(currentPage) + 1;
|
||||
if (destructive && currentPage != null) {
|
||||
dataPages.remove(currentPage);
|
||||
pageToFree = currentPage;
|
||||
nextIdx--;
|
||||
}
|
||||
try {
|
||||
Closeables.close(reader, /* swallowIOException = */ false);
|
||||
reader = spillWriters.getFirst().getReader(serializerManager);
|
||||
recordsInPage = -1;
|
||||
} catch (IOException e) {
|
||||
// Scala iterator does not handle exception
|
||||
Platform.throwException(e);
|
||||
if (dataPages.size() > nextIdx) {
|
||||
currentPage = dataPages.get(nextIdx);
|
||||
pageBaseObject = currentPage.getBaseObject();
|
||||
offsetInPage = currentPage.getBaseOffset();
|
||||
recordsInPage = UnsafeAlignedOffset.getSize(pageBaseObject, offsetInPage);
|
||||
offsetInPage += UnsafeAlignedOffset.getUaoSize();
|
||||
} else {
|
||||
currentPage = null;
|
||||
if (reader != null) {
|
||||
handleFailedDelete();
|
||||
}
|
||||
try {
|
||||
Closeables.close(reader, /* swallowIOException = */ false);
|
||||
reader = spillWriters.getFirst().getReader(serializerManager);
|
||||
recordsInPage = -1;
|
||||
} catch (IOException e) {
|
||||
// Scala iterator does not handle exception
|
||||
Platform.throwException(e);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
if (pageToFree != null) {
|
||||
freePage(pageToFree);
|
||||
} finally {
|
||||
if (pageToFree != null) {
|
||||
freePage(pageToFree);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue