Repository: hive Updated Branches: refs/heads/branch-2 291a259c6 -> 76933e7ad
HIVE-17411 : LLAP IO may incorrectly release a refcount in some rare cases (Sergey Shelukhin, reviewed by Prasanth Jayachandran) Project: http://git-wip-us.apache.org/repos/asf/hive/repo Commit: http://git-wip-us.apache.org/repos/asf/hive/commit/76933e7a Tree: http://git-wip-us.apache.org/repos/asf/hive/tree/76933e7a Diff: http://git-wip-us.apache.org/repos/asf/hive/diff/76933e7a Branch: refs/heads/branch-2 Commit: 76933e7adbfc7b305b95aa6e515d474fd8d51ede Parents: 291a259 Author: sergey <[email protected]> Authored: Wed Aug 30 10:33:46 2017 -0700 Committer: sergey <[email protected]> Committed: Wed Aug 30 11:53:29 2017 -0700 ---------------------------------------------------------------------- .../hadoop/hive/ql/io/orc/encoded/EncodedReaderImpl.java | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/hive/blob/76933e7a/ql/src/java/org/apache/hadoop/hive/ql/io/orc/encoded/EncodedReaderImpl.java ---------------------------------------------------------------------- diff --git a/ql/src/java/org/apache/hadoop/hive/ql/io/orc/encoded/EncodedReaderImpl.java b/ql/src/java/org/apache/hadoop/hive/ql/io/orc/encoded/EncodedReaderImpl.java index 230d082..3ef03ea 100644 --- a/ql/src/java/org/apache/hadoop/hive/ql/io/orc/encoded/EncodedReaderImpl.java +++ b/ql/src/java/org/apache/hadoop/hive/ql/io/orc/encoded/EncodedReaderImpl.java @@ -1211,8 +1211,11 @@ class EncodedReaderImpl implements EncodedReader { // as long as they are still in the same stream and are not already released. DiskRangeList prev = cc.prev; while (true) { - if ((prev == null) || (prev.getEnd() <= streamStartOffset) - || !(prev instanceof CacheChunk)) break; + // Do not release beyond current stream (we don't know which RGs that buffer is for). + if ((prev == null) || (prev.getEnd() <= streamStartOffset)) break; + // Only release cache chunks; do not release ProcCacheChunks - they may not yet have data. + if (prev.getClass() != CacheChunk.class) break; + CacheChunk prevCc = (CacheChunk)prev; if (prevCc.buffer == null) break; try {
