summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDimitry Ivanov <dimitry@google.com>2016-05-02 10:43:16 -0700
committerDimitry Ivanov <dimitry@google.com>2016-05-02 13:35:32 -0700
commit911472da85bb1caa3e28d86c17ade347d06f33b3 (patch)
tree14c5bff543c6071a7d48b67f5698eac5043d2a56
parentbfd6a0f24dbcf00db61c283249e5e5a4f6a9d8a6 (diff)
downloadsystem_core-911472da85bb1caa3e28d86c17ade347d06f33b3.tar.gz
system_core-911472da85bb1caa3e28d86c17ade347d06f33b3.tar.bz2
system_core-911472da85bb1caa3e28d86c17ade347d06f33b3.zip
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 be4ca3afc0636b314d676480156eb6977739dd00)
-rw-r--r--libnativeloader/include/nativeloader/native_loader.h3
-rw-r--r--libnativeloader/native_loader.cpp10
2 files changed, 13 insertions, 0 deletions
diff --git a/libnativeloader/include/nativeloader/native_loader.h b/libnativeloader/include/nativeloader/native_loader.h
index 1bd3b8f07..d606a760e 100644
--- a/libnativeloader/include/nativeloader/native_loader.h
+++ b/libnativeloader/include/nativeloader/native_loader.h
@@ -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_
diff --git a/libnativeloader/native_loader.cpp b/libnativeloader/native_loader.cpp
index e20c82303..72152e737 100644
--- a/libnativeloader/native_loader.cpp
+++ b/libnativeloader/native_loader.cpp
@@ -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,