create global ref properly in YogaJNIException
Summary: ##Changelog: [Internal][Yoga] create global ref properly in YogaJNIException Reviewed By: astreet Differential Revision: D18775982 fbshipit-source-id: ee529d6178d40b5f887fa1327fe156fa466f154f
This commit is contained in:
committed by
Facebook Github Bot
parent
ac8eb111a9
commit
089095f532
@@ -19,18 +19,19 @@ YogaJniException::YogaJniException() {
|
||||
static const jmethodID methodId = facebook::yoga::vanillajni::getMethodId(
|
||||
getCurrentEnv(), cl, "<init>", "()V");
|
||||
auto throwable = getCurrentEnv()->NewObject(cl, methodId);
|
||||
throwable_ = make_global_ref(static_cast<jthrowable>(throwable));
|
||||
throwable_ =
|
||||
newGlobalRef(getCurrentEnv(), static_cast<jthrowable>(throwable));
|
||||
}
|
||||
|
||||
YogaJniException::YogaJniException(jthrowable throwable) {
|
||||
throwable_ = make_global_ref(throwable);
|
||||
throwable_ = newGlobalRef(getCurrentEnv(), throwable);
|
||||
}
|
||||
|
||||
YogaJniException::YogaJniException(YogaJniException&& rhs)
|
||||
: throwable_(std::move(rhs.throwable_)) {}
|
||||
|
||||
YogaJniException::YogaJniException(const YogaJniException& rhs) {
|
||||
throwable_ = make_global_ref(rhs.throwable_.get());
|
||||
throwable_ = newGlobalRef(getCurrentEnv(), rhs.throwable_.get());
|
||||
}
|
||||
|
||||
YogaJniException::~YogaJniException() {
|
||||
@@ -42,7 +43,9 @@ YogaJniException::~YogaJniException() {
|
||||
}
|
||||
|
||||
ScopedLocalRef<jthrowable> YogaJniException::getThrowable() const noexcept {
|
||||
return make_local_ref(getCurrentEnv(), throwable_.get());
|
||||
return make_local_ref(
|
||||
getCurrentEnv(),
|
||||
static_cast<jthrowable>(getCurrentEnv()->NewLocalRef(throwable_.get())));
|
||||
}
|
||||
} // namespace vanillajni
|
||||
} // namespace yoga
|
||||
|
@@ -96,6 +96,16 @@ ScopedGlobalRef<jobject> newGlobalRef(JNIEnv* env, jobject obj) {
|
||||
|
||||
return make_global_ref(result);
|
||||
}
|
||||
|
||||
ScopedGlobalRef<jthrowable> newGlobalRef(JNIEnv* env, jthrowable obj) {
|
||||
jthrowable result = static_cast<jthrowable>(env->NewGlobalRef(obj));
|
||||
|
||||
if (!result) {
|
||||
logErrorMessageAndDie("Could not obtain global reference from object");
|
||||
}
|
||||
|
||||
return make_global_ref(result);
|
||||
}
|
||||
} // namespace vanillajni
|
||||
} // namespace yoga
|
||||
} // namespace facebook
|
||||
|
@@ -69,6 +69,8 @@ callStaticObjectMethod(JNIEnv* env, jclass clazz, jmethodID methodId, ...);
|
||||
* reference out of it. If any error happens, aborts the process.
|
||||
*/
|
||||
ScopedGlobalRef<jobject> newGlobalRef(JNIEnv* env, jobject obj);
|
||||
|
||||
ScopedGlobalRef<jthrowable> newGlobalRef(JNIEnv* env, jthrowable obj);
|
||||
} // namespace vanillajni
|
||||
} // namespace yoga
|
||||
} // namespace facebook
|
||||
|
Reference in New Issue
Block a user