Merge "Add error_msg argument to CloseNativeLibrary"

am: 6590255dbb

Change-Id: I1bbe1acf3b2fb3b2ae2ee77cfacf98f750aedbd1
This commit is contained in:
Dimitry Ivanov 2018-09-12 12:09:25 -07:00 committed by android-build-merger
commit 165121c0c8
3 changed files with 19 additions and 6 deletions

View file

@ -99,7 +99,7 @@ bool NativeBridgeError();
bool NativeBridgeNameAcceptable(const char* native_bridge_library_filename);
// Decrements the reference count on the dynamic library handler. If the reference count drops
// to zero then the dynamic library is unloaded.
// to zero then the dynamic library is unloaded. Returns 0 on success and non-zero on error.
int NativeBridgeUnloadLibrary(void* handle);
// Get last error message of native bridge when fail to load library or search symbol.

View file

@ -47,8 +47,9 @@ void* OpenNativeLibrary(JNIEnv* env,
bool* needs_native_bridge,
std::string* error_msg);
__attribute__((visibility("default")))
bool CloseNativeLibrary(void* handle, const bool needs_native_bridge);
__attribute__((visibility("default"))) bool CloseNativeLibrary(void* handle,
const bool needs_native_bridge,
std::string* error_msg);
#if defined(__ANDROID__)
// Look up linker namespace by class_loader. Returns nullptr if

View file

@ -710,9 +710,21 @@ void* OpenNativeLibrary(JNIEnv* env,
#endif
}
bool CloseNativeLibrary(void* handle, const bool needs_native_bridge) {
return needs_native_bridge ? NativeBridgeUnloadLibrary(handle) :
dlclose(handle);
bool CloseNativeLibrary(void* handle, const bool needs_native_bridge, std::string* error_msg) {
bool success;
if (needs_native_bridge) {
success = (NativeBridgeUnloadLibrary(handle) == 0);
if (!success) {
*error_msg = NativeBridgeGetError();
}
} else {
success = (dlclose(handle) == 0);
if (!success) {
*error_msg = dlerror();
}
}
return success;
}
#if defined(__ANDROID__)