ReactNativeConfigHolder must retain underlying Java object as global_ref

Summary: We were using an alias_ref which is like a raw pointer (not managed/retained); as it turns out, everywhere (?) else we accept an alias_ref we convert it to a global_ref (see Binding.cpp, JMessageQueueThread). We've just gotten lucky to not have already hit use-after-free errors.

Reviewed By: mdvacca

Differential Revision: D17275200

fbshipit-source-id: 581a51da36e96c353ed1117e9e0f428e65d36d69
This commit is contained in:
Joshua Gross
2019-09-09 19:52:27 -07:00
committed by Facebook Github Bot
parent 21977f895a
commit 09aefa191b
@@ -23,7 +23,7 @@ namespace react {
class ReactNativeConfigHolder : public ReactNativeConfig {
public:
ReactNativeConfigHolder(jni::alias_ref<jobject> reactNativeConfig)
: reactNativeConfig_(reactNativeConfig){};
: reactNativeConfig_(make_global(reactNativeConfig)){};
bool getBool(const std::string& param) const override;
std::string getString(const std::string& param) const override;
@@ -31,7 +31,7 @@ class ReactNativeConfigHolder : public ReactNativeConfig {
double getDouble(const std::string& param) const override;
private:
jni::alias_ref<jobject> reactNativeConfig_;
jni::global_ref<jobject> reactNativeConfig_;
};
} // namespace react