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

Commit 34fa704d authored by Dimitry Ivanov's avatar Dimitry Ivanov
Browse files

nativeloader: refactor FindNamespaceByClassLoader method

FindNamespaceByClassLoader returns android_namespace_t* to make
it suitable for exporting this functionality.

Bug: http://b/27189432
Change-Id: Ifef3de753192178e0184fb114596fe956fde2826
parent d633106d
Loading
Loading
Loading
Loading
+16 −17
Original line number Diff line number Diff line
@@ -79,10 +79,10 @@ class LibraryNamespaces {

    std::lock_guard<std::mutex> guard(mutex_);

    auto it = FindNamespaceByClassLoader(env, class_loader);
    android_namespace_t* ns = FindNamespaceByClassLoader(env, class_loader);

    if (it != namespaces_.end()) {
      return it->second;
    if (ns != nullptr) {
      return ns;
    }

    uint64_t namespace_type = ANDROID_NAMESPACE_TYPE_ISOLATED;
@@ -90,8 +90,7 @@ class LibraryNamespaces {
      namespace_type |= ANDROID_NAMESPACE_TYPE_SHARED;
    }

    android_namespace_t* ns =
            android_create_namespace("classloader-namespace",
    ns = android_create_namespace("classloader-namespace",
                                  nullptr,
                                  library_path.c_str(),
                                  namespace_type,
@@ -122,12 +121,12 @@ class LibraryNamespaces {
    return initialized_;
  }

  std::vector<std::pair<jweak, android_namespace_t*>>::const_iterator
  FindNamespaceByClassLoader(JNIEnv* env, jobject class_loader) {
    return std::find_if(namespaces_.begin(), namespaces_.end(),
  android_namespace_t* FindNamespaceByClassLoader(JNIEnv* env, jobject class_loader) {
    auto it = std::find_if(namespaces_.begin(), namespaces_.end(),
                [&](const std::pair<jweak, android_namespace_t*>& value) {
                  return env->IsSameObject(value.first, class_loader);
                });
    return it != namespaces_.end() ? it->second : nullptr;
  }

  bool initialized_;