Merge "Allow different namespace types for different classloaders"
am: a61c48d5fd
Change-Id: Idcf998f47e8a09fbe1e56a898f23b2c82a75aa44
This commit is contained in:
commit
9b1d1cb923
4 changed files with 17 additions and 13 deletions
|
@ -104,7 +104,7 @@ int NativeBridgeUnloadLibrary(void* handle);
|
|||
|
||||
// Get last error message of native bridge when fail to load library or search symbol.
|
||||
// This is reflection of dlerror() for native bridge.
|
||||
char* NativeBridgeGetError();
|
||||
const char* NativeBridgeGetError();
|
||||
|
||||
struct native_bridge_namespace_t;
|
||||
|
||||
|
@ -244,7 +244,7 @@ struct NativeBridgeCallbacks {
|
|||
// Returns:
|
||||
// A string describing the most recent error that occurred when load library
|
||||
// or lookup symbol via native bridge.
|
||||
char* (*getError)();
|
||||
const char* (*getError)();
|
||||
|
||||
// Check whether library paths are supported by native bridge.
|
||||
//
|
||||
|
|
|
@ -551,15 +551,15 @@ int NativeBridgeUnloadLibrary(void* handle) {
|
|||
return -1;
|
||||
}
|
||||
|
||||
char* NativeBridgeGetError() {
|
||||
const char* NativeBridgeGetError() {
|
||||
if (NativeBridgeInitialized()) {
|
||||
if (isCompatibleWith(NAMESPACE_VERSION)) {
|
||||
return callbacks->getError();
|
||||
} else {
|
||||
ALOGE("not compatible with version %d, cannot get message", NAMESPACE_VERSION);
|
||||
return "native bridge implementation is not compatible with version 3, cannot get message";
|
||||
}
|
||||
}
|
||||
return nullptr;
|
||||
return "native bridge is not initialized";
|
||||
}
|
||||
|
||||
bool NativeBridgeIsPathSupported(const char* path) {
|
||||
|
|
|
@ -68,7 +68,7 @@ extern "C" int native_bridge3_unloadLibrary(void* /* handle */) {
|
|||
return 0;
|
||||
}
|
||||
|
||||
extern "C" char* native_bridge3_getError() {
|
||||
extern "C" const char* native_bridge3_getError() {
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
|
|
|
@ -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();
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue