From d836ab005a3fd70e477a01d4200483131a285c9a Mon Sep 17 00:00:00 2001 From: Dimitry Ivanov Date: Wed, 2 Nov 2016 18:03:10 -0700 Subject: Allow different namespace types for different classloaders An app should be able to make cross-arch calls to different apps via other app's Context.getClassLoader() Bug: 32542970 Test: Boot fugu. Check that there are no linker-namespace related errors in the log. Change-Id: I1593f4688bcde0121a5e24a707441a4935fa7dc4 --- libnativeloader/native_loader.cpp | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) (limited to 'libnativeloader/native_loader.cpp') diff --git a/libnativeloader/native_loader.cpp b/libnativeloader/native_loader.cpp index e09cce3e3..15fe0540e 100644 --- a/libnativeloader/native_loader.cpp +++ b/libnativeloader/native_loader.cpp @@ -308,13 +308,17 @@ class LibraryNamespaces { // code is one example) unknown to linker in which case linker uses anonymous // namespace. The second argument specifies the search path for the anonymous // namespace which is the library_path of the classloader. - if (!is_native_bridge) { - initialized_ = android_init_namespaces(public_libraries_.c_str(), library_path); - if (!initialized_) { - *error_msg = dlerror(); - } - } else { - initialized_ = NativeBridgeInitNamespace(public_libraries_.c_str(), library_path); + initialized_ = android_init_namespaces(public_libraries_.c_str(), + is_native_bridge ? nullptr : library_path); + if (!initialized_) { + *error_msg = dlerror(); + return false; + } + + // and now initialize native bridge namespaces if necessary. + if (NativeBridgeInitialized()) { + initialized_ = NativeBridgeInitNamespace(public_libraries_.c_str(), + is_native_bridge ? library_path : nullptr); if (!initialized_) { *error_msg = NativeBridgeGetError(); } -- cgit v1.2.3