summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Elliott Hughes <enh@google.com> 2020-12-17 16:47:26 -0800
committer Elliott Hughes <enh@google.com> 2021-01-05 21:35:44 +0000
commit8de1fc3a75dcc900aed271a4f654d912a8838c1d (patch)
tree0f66a2f886ac5eb074cfa5f20ddb7729ad383afe
parentb677affde680c730aa22fab4d7eeb9fabb38d3c0 (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.h18
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