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* 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 guard(g_namespaces_mutex); + g_namespaces->Reset(); +#endif +} jstring CreateClassLoaderNamespace(JNIEnv* env, int32_t target_sdk_version,