summaryrefslogtreecommitdiffstats
path: root/runtime/native_bridge_art_interface.cc
diff options
context:
space:
mode:
authorAndreas Gampe <agampe@google.com>2015-05-22 18:31:50 -0700
committerAndreas Gampe <agampe@google.com>2015-05-31 16:59:11 -0700
commit8ee2145d65ed14b267ae4c6396f2333115611a97 (patch)
tree77c4ffa7f2b21e35e9e09bbce26306ca486f64e2 /runtime/native_bridge_art_interface.cc
parent93de952df65ca5033bda313712b68b6272b4975f (diff)
downloadart-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.cc17
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() {