diff --git a/ReactAndroid/src/main/java/com/facebook/react/fabric/jsi/jni/Binding.cpp b/ReactAndroid/src/main/java/com/facebook/react/fabric/jsi/jni/Binding.cpp index 5f761938751..bff1dc8b3f1 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/fabric/jsi/jni/Binding.cpp +++ b/ReactAndroid/src/main/java/com/facebook/react/fabric/jsi/jni/Binding.cpp @@ -287,14 +287,12 @@ local_ref createUpdateStateMountItem( auto state = mutation.newChildShadowView.state; - // We use state.get() to pass a raw pointer through the JNI - // We don't need to access the state ptr in Java, but we need to be able to - // pass a state object back through the JNI for state updates - // Do not hold onto Java object from C + // We DO want to hold onto C object from Java, since we don't know the + // lifetime of the Java object auto javaStateWrapper = StateWrapperImpl::newObjectJavaArgs(); StateWrapperImpl* cStateWrapper = cthis(javaStateWrapper); - cStateWrapper->state_ = state.get(); + cStateWrapper->state_ = state; return updateStateInstruction( javaUIManager, diff --git a/ReactAndroid/src/main/java/com/facebook/react/fabric/jsi/jni/StateWrapperImpl.h b/ReactAndroid/src/main/java/com/facebook/react/fabric/jsi/jni/StateWrapperImpl.h index 0796f5ec836..82239ef0635 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/fabric/jsi/jni/StateWrapperImpl.h +++ b/ReactAndroid/src/main/java/com/facebook/react/fabric/jsi/jni/StateWrapperImpl.h @@ -23,7 +23,7 @@ class StateWrapperImpl : public jni::HybridClass { jni::local_ref getState(); void updateStateImpl(NativeMap *map); - const State* state_; + State::Shared state_; private: jni::alias_ref jhybridobject_;