Attempt to fix a direct memory deallocation crash on android

empirephoenix-patch-1
Nehon 7 years ago
parent 87cfae6d7b
commit 2120c9d334
  1. 19
      jme3-core/src/main/java/com/jme3/util/ReflectionAllocator.java

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

Loading…
Cancel
Save