diff options
author | Andreas Gampe <agampe@google.com> | 2015-05-22 18:31:50 -0700 |
---|---|---|
committer | Andreas Gampe <agampe@google.com> | 2015-05-31 16:59:11 -0700 |
commit | 8ee2145d65ed14b267ae4c6396f2333115611a97 (patch) | |
tree | 77c4ffa7f2b21e35e9e09bbce26306ca486f64e2 /runtime/native_bridge_art_interface.cc | |
parent | 93de952df65ca5033bda313712b68b6272b4975f (diff) | |
download | art-8ee2145d65ed14b267ae4c6396f2333115611a97.tar.gz art-8ee2145d65ed14b267ae4c6396f2333115611a97.tar.bz2 art-8ee2145d65ed14b267ae4c6396f2333115611a97.zip |
ART: Add support for special handlers in sigchainlib
Add support for a special managed handler in sigchainlib that
will be called as the first user handler.
Use this support for native bridge v2. Extend test 115-native-bridge
to test the functionality.
Bug: 20217701
(cherry picked from commit 03c2cc89428914adf52229d6a3867eef6127911a)
Change-Id: I78cc01fbdabe169154ff6b94c9f3ddb95b5c7448
Diffstat (limited to 'runtime/native_bridge_art_interface.cc')
-rw-r--r-- | runtime/native_bridge_art_interface.cc | 17 |
1 files changed, 16 insertions, 1 deletions
diff --git a/runtime/native_bridge_art_interface.cc b/runtime/native_bridge_art_interface.cc index b7f31f2005..0ad560e9eb 100644 --- a/runtime/native_bridge_art_interface.cc +++ b/runtime/native_bridge_art_interface.cc @@ -16,6 +16,8 @@ #include "native_bridge_art_interface.h" +#include <signal.h> + #include "nativebridge/native_bridge.h" #include "base/logging.h" @@ -24,6 +26,7 @@ #include "mirror/art_method-inl.h" #include "mirror/class-inl.h" #include "scoped_thread_state_change.h" +#include "sigchain.h" namespace art { @@ -127,7 +130,19 @@ void PreInitializeNativeBridge(std::string dir) { } void InitializeNativeBridge(JNIEnv* env, const char* instruction_set) { - android::InitializeNativeBridge(env, instruction_set); + if (android::InitializeNativeBridge(env, instruction_set)) { + if (android::NativeBridgeGetVersion() >= 2U) { +#ifdef _NSIG // Undefined on Apple, but we don't support running on Mac, anyways. + // Managed signal handling support added in version 2. + for (int signal = 0; signal < _NSIG; ++signal) { + android::NativeBridgeSignalHandlerFn fn = android::NativeBridgeGetSignalHandler(signal); + if (fn != nullptr) { + SetSpecialSignalHandlerFn(signal, fn); + } + } +#endif + } + } } void UnloadNativeBridge() { |