Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit be4ca3af authored by Dimitry Ivanov's avatar Dimitry Ivanov
Browse files

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
parent 721c9ce4
Loading
Loading
Loading
Loading
+3 −0
Original line number Diff line number Diff line
@@ -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_
+10 −0
Original line number Diff line number Diff line
@@ -131,6 +131,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.
@@ -185,6 +189,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,