diff options
author | 2024-11-28 15:22:05 +0000 | |
---|---|---|
committer | 2024-11-28 20:11:17 +0000 | |
commit | a24e2c255173070c5e354f501bc28e4c7e8d77da (patch) | |
tree | 88c9d931a25ecc8a0cc924d18b393c44fecdc983 | |
parent | cca3341e67fd9f45362448428abd47da09cdb954 (diff) |
Make NativeLoaderNamespace instances immutable.
To make it easier to reason about thread safety.
Test: atest libnativeloader_e2e_tests libnativeloader_test \
art_libnativeloader_cts_test libnativeloader_lazy_test
Bug: 326505705
Bug: 326610154
Change-Id: I2447ed8120625823d3298d392d22828af2c22402
-rw-r--r-- | libnativeloader/library_namespaces.cpp | 8 | ||||
-rw-r--r-- | libnativeloader/native_loader_namespace.cpp | 12 | ||||
-rw-r--r-- | libnativeloader/native_loader_namespace.h | 5 |
3 files changed, 14 insertions, 11 deletions
diff --git a/libnativeloader/library_namespaces.cpp b/libnativeloader/library_namespaces.cpp index 7aa14080ce..b27b268d16 100644 --- a/libnativeloader/library_namespaces.cpp +++ b/libnativeloader/library_namespaces.cpp @@ -432,10 +432,10 @@ Result<NativeLoaderNamespace*> LibraryNamespaces::Create(JNIEnv* env, const std::string product_libs = filter_public_libraries(target_sdk_version, uses_libraries, product_public_libraries()); if (!product_libs.empty()) { - Result<NativeLoaderNamespace> target_ns = system_ns; - if (is_product_treblelized()) { - target_ns = NativeLoaderNamespace::GetExportedNamespace(kProductNamespaceName, is_bridged); - } + Result<NativeLoaderNamespace> target_ns = + is_product_treblelized() + ? NativeLoaderNamespace::GetExportedNamespace(kProductNamespaceName, is_bridged) + : system_ns; if (target_ns.ok()) { linked = app_ns->Link(&target_ns.value(), product_libs); if (!linked.ok()) { diff --git a/libnativeloader/native_loader_namespace.cpp b/libnativeloader/native_loader_namespace.cpp index cfb84b7d9e..98236064d0 100644 --- a/libnativeloader/native_loader_namespace.cpp +++ b/libnativeloader/native_loader_namespace.cpp @@ -69,10 +69,14 @@ Result<NativeLoaderNamespace> NativeLoaderNamespace::GetExportedNamespace(const // "system" for those in the Runtime APEX. Try "system" first since // "default" always exists. Result<NativeLoaderNamespace> NativeLoaderNamespace::GetSystemNamespace(bool is_bridged) { - Result<NativeLoaderNamespace> ns = GetExportedNamespace(kSystemNamespaceName, is_bridged); - if (ns.ok()) return ns; - ns = GetExportedNamespace(kDefaultNamespaceName, is_bridged); - if (ns.ok()) return ns; + if (Result<NativeLoaderNamespace> ns = GetExportedNamespace(kSystemNamespaceName, is_bridged); + ns.ok()) { + return ns; + } + if (Result<NativeLoaderNamespace> ns = GetExportedNamespace(kDefaultNamespaceName, is_bridged); + ns.ok()) { + return ns; + } // If nothing is found, return NativeLoaderNamespace constructed from nullptr. // nullptr also means default namespace to the linker. diff --git a/libnativeloader/native_loader_namespace.h b/libnativeloader/native_loader_namespace.h index 9a5aeac203..4d9ce36434 100644 --- a/libnativeloader/native_loader_namespace.h +++ b/libnativeloader/native_loader_namespace.h @@ -47,7 +47,6 @@ struct NativeLoaderNamespace { NativeLoaderNamespace(NativeLoaderNamespace&&) = default; NativeLoaderNamespace(const NativeLoaderNamespace&) = default; - NativeLoaderNamespace& operator=(const NativeLoaderNamespace&) = default; android_namespace_t* ToRawAndroidNamespace() const { return std::get<0>(raw_); } native_bridge_namespace_t* ToRawNativeBridgeNamespace() const { return std::get<1>(raw_); } @@ -72,8 +71,8 @@ struct NativeLoaderNamespace { explicit NativeLoaderNamespace(const std::string& name, native_bridge_namespace_t* ns) : name_(name), raw_(ns) {} - std::string name_; - std::variant<android_namespace_t*, native_bridge_namespace_t*> raw_; + const std::string name_; + const std::variant<android_namespace_t*, native_bridge_namespace_t*> raw_; }; } // namespace android |