diff options
author | nobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2017-04-15 02:07:01 +0000 |
---|---|---|
committer | nobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2017-04-15 02:07:01 +0000 |
commit | 6f1fbfd6187db01e3c3967468cc8b182fc8ca847 (patch) | |
tree | 36d2ac90d740b28a5497868422e03a23d9fbfc95 /signal.c | |
parent | fd421a9af00ccd1af44b57f900a3acc8f312b51e (diff) |
signal.c: prefer pthread_sigmask
* signal.c (raise_stack_overflow): prefer pthread_sigmask to
sigprocmask, for multithreading.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@58361 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'signal.c')
-rw-r--r-- | signal.c | 14 |
1 files changed, 10 insertions, 4 deletions
@@ -773,18 +773,24 @@ NORETURN(void ruby_thread_stack_overflow(rb_thread_t *th)); # define USE_UCONTEXT_REG 1 # endif NORETURN(static void raise_stack_overflow(int sig, rb_thread_t *th)); +#if defined(HAVE_PTHREAD_SIGMASK) +# define ruby_sigunmask pthread_sigmask +#elif defined(HAVE_SIGPROCMASK) +# define ruby_sigunmask sigprocmask +#endif static void raise_stack_overflow(int sig, rb_thread_t *th) { -#ifdef HAVE_SIGPROCMASK +#if defined(ruby_sigunmask) sigset_t mask; #endif clear_received_signal(); -#ifdef HAVE_SIGPROCMASK +#if defined(ruby_sigunmask) sigemptyset(&mask); sigaddset(&mask, sig); - if (sigprocmask(SIG_UNBLOCK, &mask, NULL)) - rb_bug_errno("sigprocmask:set", errno); + if (ruby_sigunmask(SIG_UNBLOCK, &mask, NULL)) { + rb_bug_errno(STRINGIZE(ruby_sigunmask)":unblock", errno); + } #endif ruby_thread_stack_overflow(th); } |