NioPlainEngine.ensureWrappedCapacity does not return old buffer when allocating new one.
The problem is the last block of code that calls Buffers.acquireBuffer, copies the "oldBuffer" into it, but then does not return "oldBuffer". It should have called Buffers.releaseBuffer. These direct buffers can eventually get garbage collected but the reason we have a pool of direct buffers is that the jvm can be very slow about returning the direct, native, memory they use so this could cause an out of direct memory failure. It will also cause the stats maintained by Buffers tracking how much memory is allocated to never be decremented.
It is possible that this block of code in ensureWrappedCapacity is dead code but it is hard to tell for sure.