Github user vrozov commented on a diff in the pull request: https://github.com/apache/drill/pull/1237#discussion_r184590436 --- Diff: exec/memory/base/src/main/java/org/apache/drill/exec/memory/AllocationManager.java --- @@ -253,10 +261,12 @@ public boolean transferBalance(final BufferLedger target) { target.historicalLog.recordEvent("incoming(from %s)", owningLedger.allocator.name); } - boolean overlimit = target.allocator.forceAllocate(size); + // Release first to handle the case where the current and target allocators were part of the same + // parent / child tree. allocator.releaseBytes(size); + boolean allocationFit = target.allocator.forceAllocate(size); --- End diff -- In this case, changing the order of `forceAllocate()` and `releaseBytes()` is incorrect as ownership is not changed, but the old owner does not account for that memory anymore.
---