diff --git a/java/com/facebook/yoga/YogaNodePropertiesByteBuffer.java b/java/com/facebook/yoga/YogaNodePropertiesByteBuffer.java index b792062b..daca67db 100644 --- a/java/com/facebook/yoga/YogaNodePropertiesByteBuffer.java +++ b/java/com/facebook/yoga/YogaNodePropertiesByteBuffer.java @@ -25,6 +25,7 @@ public class YogaNodePropertiesByteBuffer implements YogaNodeProperties, Cloneab private final long mNativePointer; private boolean mHasBorderSet = false; private boolean mHasNewLayout = true; + private boolean isFreed = false; private static native ByteBuffer jni_getStyleBuffer(long nativePointer); @@ -48,12 +49,10 @@ public class YogaNodePropertiesByteBuffer implements YogaNodeProperties, Cloneab mLayoutBuffer = jni_getLayoutBuffer(nativePointer).order(ByteOrder.LITTLE_ENDIAN); } - private static native void jni_YGNodeFree(long nativePointer); - @Override protected void finalize() throws Throwable { try { - jni_YGNodeFree(getNativePointer()); + freeNatives(); } finally { super.finalize(); } @@ -482,9 +481,14 @@ public class YogaNodePropertiesByteBuffer implements YogaNodeProperties, Cloneab return YogaDirection.fromInt(getLayoutDirectionInt()); } + private static native void jni_YGNodeFree(long nativePointer); + @Override public void freeNatives() { - jni_YGNodeFree(mNativePointer); + if (!isFreed) { + isFreed = true; + jni_YGNodeFree(mNativePointer); + } } private int getLayoutDirectionInt() { diff --git a/java/com/facebook/yoga/YogaNodePropertiesJNI.java b/java/com/facebook/yoga/YogaNodePropertiesJNI.java index d7644ba5..2322193c 100644 --- a/java/com/facebook/yoga/YogaNodePropertiesJNI.java +++ b/java/com/facebook/yoga/YogaNodePropertiesJNI.java @@ -66,12 +66,13 @@ public class YogaNodePropertiesJNI implements Cloneable, YogaNodeProperties { } } - private native void jni_YGNodeFree(long nativePointer); + private static native void jni_YGNodeFree(long nativePointer); @Override public void freeNatives() { - jni_YGNodeFree(mNativePointer); + long nativePointer = mNativePointer; mNativePointer = 0; + jni_YGNodeFree(nativePointer); } @Override diff --git a/java/jni/YGJNI.cpp b/java/jni/YGJNI.cpp index ecf13a26..7f4dc041 100644 --- a/java/jni/YGJNI.cpp +++ b/java/jni/YGJNI.cpp @@ -384,7 +384,7 @@ jlong jni_YGNodeCloneNoProps( return jni_YGNodeClone(cls, nativePointer, clonedJavaObject, nullptr); } -void jni_YGNodeFree(alias_ref thiz, jlong nativePointer) { +void jni_YGNodeFree(alias_ref thiz, jlong nativePointer) { if (nativePointer == 0) { return; }