nativeloader: Add Reset capabilities
In the case when VM is restarted all weak references
from the old VM become invalid. In such event NativeLoader
needs to clear the list of classloaders from old VM.
Bug: http://b/28453840
Bug: http://b/28449304
Change-Id: I2268c1e21cf940c57ddc5f0312f56b71aa702134
(cherry picked from commit be4ca3afc0
)
This commit is contained in:
parent
bfd6a0f24d
commit
911472da85
|
@ -50,6 +50,9 @@ __attribute__((visibility("default")))
|
|||
android_namespace_t* FindNamespaceByClassLoader(JNIEnv* env, jobject class_loader);
|
||||
#endif
|
||||
|
||||
__attribute__((visibility("default")))
|
||||
void ResetNativeLoader();
|
||||
|
||||
}; // namespace android
|
||||
|
||||
#endif // NATIVE_BRIDGE_H_
|
||||
|
|
|
@ -121,6 +121,10 @@ class LibraryNamespaces {
|
|||
public_libraries_ = base::Join(sonames, ':');
|
||||
}
|
||||
|
||||
void Reset() {
|
||||
namespaces_.clear();
|
||||
}
|
||||
|
||||
private:
|
||||
bool ReadConfig(const std::string& configFile, std::vector<std::string>* sonames) {
|
||||
// Read list of public native libraries from the config file.
|
||||
|
@ -172,6 +176,12 @@ void InitializeNativeLoader() {
|
|||
#endif
|
||||
}
|
||||
|
||||
void ResetNativeLoader() {
|
||||
#if defined(__ANDROID__)
|
||||
std::lock_guard<std::mutex> guard(g_namespaces_mutex);
|
||||
g_namespaces->Reset();
|
||||
#endif
|
||||
}
|
||||
|
||||
jstring CreateClassLoaderNamespace(JNIEnv* env,
|
||||
int32_t target_sdk_version,
|
||||
|
|
Loading…
Reference in New Issue