diff options
author | 2020-12-17 16:47:26 -0800 | |
---|---|---|
committer | 2021-01-05 21:35:44 +0000 | |
commit | 8de1fc3a75dcc900aed271a4f654d912a8838c1d (patch) | |
tree | 0f66a2f886ac5eb074cfa5f20ddb7729ad383afe | |
parent | b677affde680c730aa22fab4d7eeb9fabb38d3c0 (diff) |
Switch to sigset64_t.
Otherwise art::SignalSet doesn't work for RT signals on LP32.
Bug: https://issuetracker.google.com/172588429
Test: treehugger
Change-Id: I6f2a773b9b1beaf29a6f7df3d17d449b68fb5f5e
-rw-r--r-- | runtime/signal_set.h | 18 |
1 files changed, 13 insertions, 5 deletions
diff --git a/runtime/signal_set.h b/runtime/signal_set.h index 53613236fa..39e4c5f175 100644 --- a/runtime/signal_set.h +++ b/runtime/signal_set.h @@ -21,24 +21,32 @@ #include <android-base/logging.h> +#if defined(__GLIBC__) +#define sigset64_t sigset_t +#define sigemptyset64 sigemptyset +#define sigaddset64 sigaddset +#define pthread_sigmask64 pthread_sigmask +#define sigwait64 sigwait +#endif + namespace art { class SignalSet { public: SignalSet() { - if (sigemptyset(&set_) == -1) { + if (sigemptyset64(&set_) == -1) { PLOG(FATAL) << "sigemptyset failed"; } } void Add(int signal) { - if (sigaddset(&set_, signal) == -1) { + if (sigaddset64(&set_, signal) == -1) { PLOG(FATAL) << "sigaddset " << signal << " failed"; } } void Block() { - if (pthread_sigmask(SIG_BLOCK, &set_, nullptr) != 0) { + if (pthread_sigmask64(SIG_BLOCK, &set_, nullptr) != 0) { PLOG(FATAL) << "pthread_sigmask failed"; } } @@ -46,7 +54,7 @@ class SignalSet { int Wait() { // Sleep in sigwait() until a signal arrives. gdb causes EINTR failures. int signal_number; - int rc = TEMP_FAILURE_RETRY(sigwait(&set_, &signal_number)); + int rc = TEMP_FAILURE_RETRY(sigwait64(&set_, &signal_number)); if (rc != 0) { PLOG(FATAL) << "sigwait failed"; } @@ -54,7 +62,7 @@ class SignalSet { } private: - sigset_t set_; + sigset64_t set_; }; } // namespace art |