Attempt to fix a direct memory deallocation crash on android

This commit is contained in:
Nehon 2017-11-26 10:35:33 +01:00
parent 87cfae6d7b
commit 2120c9d334

View File

@ -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);
}
}
}