|
@@ -149,10 +149,21 @@ public final class ReflectionAllocator implements BufferAllocator {
|
|
|
// first
|
|
|
Object viewedBuffer = localViewedBufferMethod.invoke(toBeDestroyed);
|
|
|
if (viewedBuffer != null) {
|
|
|
- destroyDirectBuffer((Buffer) viewedBuffer);
|
|
|
- } else {
|
|
|
- Logger.getLogger(BufferUtils.class.getName()).log(Level.SEVERE,
|
|
|
- "Buffer cannot be destroyed: {0}", toBeDestroyed);
|
|
|
+ if (viewedBuffer instanceof Buffer) {
|
|
|
+ destroyDirectBuffer((Buffer) viewedBuffer);
|
|
|
+ } else {
|
|
|
+ //on android there is an internal MemoryRef class that is returned and has a "free" method.
|
|
|
+ Method freeMethod = loadMethod(viewedBuffer.getClass().getName(), "free");
|
|
|
+ if (freeMethod != null) {
|
|
|
+ freeMethod.invoke(viewedBuffer);
|
|
|
+ } else {
|
|
|
+ Logger.getLogger(BufferUtils.class.getName()).log(Level.SEVERE,
|
|
|
+ "Buffer cannot be destroyed: {0}, {1}", new Object[]{toBeDestroyed, viewedBuffer});
|
|
|
+ }
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ Logger.getLogger(BufferUtils.class.getName()).log(Level.SEVERE,
|
|
|
+ "Buffer cannot be destroyed: {0}", toBeDestroyed);
|
|
|
}
|
|
|
}
|
|
|
}
|