Details
-
Bug
-
Status: Closed
-
Major
-
Resolution: Fixed
-
None
-
None
Description
when an allocator takes ownership of a buffer, AtomicRemainder.forceGet(int) is called to account for the extra memory of the buffer, but when the allocator exceeds it's maximum allocated memory it accounts for it incorrectly. In the following code, availableShared.andAndGet(size) should actually receive -size:
public boolean forceGet(long size) { if (get(size, this.applyFragmentLimit)) { return true; } else { availableShared.addAndGet(size); if (parent != null) { parent.forceGet(size); } return false; } }
I was able to reproduce the issue in a simple unit test