Merge "fix: ATRACE does not work for libs loaded in sphal namespace" into oc-dev

am: b560e6db6a

Change-Id: I3c81f72c2d5f1eb30401012b92a1a3b65cbfdb80
This commit is contained in:
Jiyong Park 2017-05-31 00:36:15 +00:00 committed by android-build-merger
commit 94baf7270a
3 changed files with 38 additions and 3 deletions

View File

@ -100,6 +100,7 @@ cc_library {
"libcutils",
"libdl",
"liblog",
"libvndksupport",
],
sanitize: {

View File

@ -23,6 +23,13 @@
#include <utils/Log.h>
#include <utils/Vector.h>
#if defined(__ANDROID__)
#include <dlfcn.h>
#include <vndksupport/linker.h>
#endif
extern "C" void do_report_sysprop_change();
using namespace android;
namespace android {
@ -61,7 +68,36 @@ void add_sysprop_change_callback(sysprop_change_callback cb, int priority) {
#endif
}
#if defined(__ANDROID__)
void (*get_report_sysprop_change_func())() {
void (*func)() = nullptr;
void* handle = android_load_sphal_library("libutils.so", RTLD_NOW);
if (handle != nullptr) {
func = reinterpret_cast<decltype(func)>(dlsym(handle, "do_report_sysprop_change"));
}
return func;
}
#endif
void report_sysprop_change() {
do_report_sysprop_change();
#if defined(__ANDROID__)
// libutils.so is double loaded; from the default namespace and from the
// 'sphal' namespace. Redirect the sysprop change event to the other instance
// of libutils.so loaded in the 'sphal' namespace so that listeners attached
// to that instance is also notified with this event.
static auto func = get_report_sysprop_change_func();
if (func != nullptr) {
(*func)();
}
#endif
}
}; // namespace android
void do_report_sysprop_change() {
#if !defined(_WIN32)
pthread_mutex_lock(&gSyspropMutex);
Vector<sysprop_change_callback_info> listeners;
@ -76,5 +112,3 @@ void report_sysprop_change() {
}
#endif
}
}; // namespace android

View File

@ -1,6 +1,6 @@
subdirs = ["tests"]
cc_library_shared {
cc_library {
name: "libvndksupport",
srcs: ["linker.c"],
local_include_dirs: ["include/vndksupport"],