Merge "fix: ATRACE does not work for libs loaded in sphal namespace" into oc-dev
This commit is contained in:
commit
b560e6db6a
|
@ -94,6 +94,7 @@ cc_library {
|
||||||
"libcutils",
|
"libcutils",
|
||||||
"libdl",
|
"libdl",
|
||||||
"liblog",
|
"liblog",
|
||||||
|
"libvndksupport",
|
||||||
],
|
],
|
||||||
|
|
||||||
sanitize: {
|
sanitize: {
|
||||||
|
|
|
@ -23,6 +23,13 @@
|
||||||
#include <utils/Log.h>
|
#include <utils/Log.h>
|
||||||
#include <utils/Vector.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;
|
using namespace android;
|
||||||
|
|
||||||
namespace android {
|
namespace android {
|
||||||
|
@ -61,7 +68,36 @@ void add_sysprop_change_callback(sysprop_change_callback cb, int priority) {
|
||||||
#endif
|
#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() {
|
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)
|
#if !defined(_WIN32)
|
||||||
pthread_mutex_lock(&gSyspropMutex);
|
pthread_mutex_lock(&gSyspropMutex);
|
||||||
Vector<sysprop_change_callback_info> listeners;
|
Vector<sysprop_change_callback_info> listeners;
|
||||||
|
@ -76,5 +112,3 @@ void report_sysprop_change() {
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
}; // namespace android
|
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
subdirs = ["tests"]
|
subdirs = ["tests"]
|
||||||
|
|
||||||
cc_library_shared {
|
cc_library {
|
||||||
name: "libvndksupport",
|
name: "libvndksupport",
|
||||||
srcs: ["linker.c"],
|
srcs: ["linker.c"],
|
||||||
local_include_dirs: ["include/vndksupport"],
|
local_include_dirs: ["include/vndksupport"],
|
||||||
|
|
Loading…
Reference in New Issue