Fix behaviour of freeNatives()
Summary: @public Prevents repeated deallocation of weak references. Reviewed By: pasqualeanatriello Differential Revision: D9131551 fbshipit-source-id: bc79596e056ae0657a55146ad786422fd0f5badc
This commit is contained in:
committed by
Facebook Github Bot
parent
0e99980206
commit
71f1d99494
@@ -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,10 +481,15 @@ public class YogaNodePropertiesByteBuffer implements YogaNodeProperties, Cloneab
|
||||
return YogaDirection.fromInt(getLayoutDirectionInt());
|
||||
}
|
||||
|
||||
private static native void jni_YGNodeFree(long nativePointer);
|
||||
|
||||
@Override
|
||||
public void freeNatives() {
|
||||
if (!isFreed) {
|
||||
isFreed = true;
|
||||
jni_YGNodeFree(mNativePointer);
|
||||
}
|
||||
}
|
||||
|
||||
private int getLayoutDirectionInt() {
|
||||
return mLayoutBuffer.getInt(YogaNodeMemoryLayout.layoutDirection);
|
||||
|
@@ -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
|
||||
|
@@ -384,7 +384,7 @@ jlong jni_YGNodeCloneNoProps(
|
||||
return jni_YGNodeClone(cls, nativePointer, clonedJavaObject, nullptr);
|
||||
}
|
||||
|
||||
void jni_YGNodeFree(alias_ref<jobject> thiz, jlong nativePointer) {
|
||||
void jni_YGNodeFree(alias_ref<jclass> thiz, jlong nativePointer) {
|
||||
if (nativePointer == 0) {
|
||||
return;
|
||||
}
|
||||
|
Reference in New Issue
Block a user