@@ -169,9 +169,6 @@ void SetSigProcMask(__sanitizer_sigset_t *set, __sanitizer_sigset_t *oldset) {
169
169
// Equivalently: newset[signum] = newset[signum] & oldset[signum]
170
170
static void KeepUnblocked (__sanitizer_sigset_t &newset,
171
171
__sanitizer_sigset_t &oldset, int signum) {
172
- // FIXME: Figure out why Android tests fail with internal_sigismember
173
- // See also: comment in BlockSignals().
174
- // In the meantime, we prefer to sometimes incorrectly unblock signals.
175
172
if (SANITIZER_ANDROID || !internal_sigismember (&oldset, signum))
176
173
internal_sigdelset (&newset, signum);
177
174
}
@@ -181,9 +178,7 @@ static void KeepUnblocked(__sanitizer_sigset_t &newset,
181
178
void BlockSignals (__sanitizer_sigset_t *oldset) {
182
179
__sanitizer_sigset_t currentset;
183
180
# if !SANITIZER_ANDROID
184
- // FIXME: SetSigProcMask and pthread_sigmask cause mysterious failures
185
- // See also: comment in KeepUnblocked().
186
- // In the meantime, we prefer to sometimes incorrectly unblock signals.
181
+ // FIXME: SetSigProcMask cause mysterious failures on Android
187
182
SetSigProcMask (NULL , ¤tset);
188
183
# endif
189
184
@@ -200,9 +195,12 @@ void BlockSignals(__sanitizer_sigset_t *oldset) {
200
195
// If this signal is blocked, such calls cannot be handled and the process may
201
196
// hang.
202
197
KeepUnblocked (newset, currentset, 31 );
198
+ # endif
203
199
200
+ # if SANITIZER_LINUX && !SANITIZER_ANDROID
204
201
// Don't block synchronous signals
205
202
// but also don't unblock signals that the user had deliberately blocked.
203
+ // FIXME: this causes mysterious failures on Android
206
204
KeepUnblocked (newset, currentset, SIGSEGV);
207
205
KeepUnblocked (newset, currentset, SIGBUS);
208
206
KeepUnblocked (newset, currentset, SIGILL);
0 commit comments