summaryrefslogtreecommitdiff
path: root/signal.c
diff options
context:
space:
mode:
authorkosaki <kosaki@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2011-07-10 17:04:40 +0000
committerkosaki <kosaki@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2011-07-10 17:04:40 +0000
commit74b339e9385181844ee44d155ac59c8544e5016c (patch)
treeb7fe34a558012145e0106c159601ead197535ae4 /signal.c
parent0b6c9402c77692b290537a66517e12bda8f6a6bb (diff)
* thread_pthread.c (rb_thread_create_timer_thread): removed
rb_disable_interrupt()/rb_enable_interrupt(). * vm_core.h: ditto. * process.c (static void before_exec): ditto. * process.c (static void after_exec): ditto. [Bug #4765] [ruby-dev:43571] * eval_intern.h: removed rb_trap_restore_mask(). * vm_eval.c (rb_throw_obj): ditto. * eval.c (setup_exception): ditto. * signal.c: removed trap_last_mask. * signal.c (trap_restore_mask): removed. * signal.c (init_sigchld): comment clarification why signal block is needed. and removed trap_last_mask operation. * signal.c (trap_ensure): removed trap_last_mask operation. * signal.c (rb_disable_interrupt, rb_enable_interrupt): made static and removed sigdelset(SIGVTALARM) and sigdelset(SIGSEGV). * process.c (rb_syswait): removed implicit signal handler change. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@32510 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'signal.c')
-rw-r--r--signal.c27
1 files changed, 8 insertions, 19 deletions
diff --git a/signal.c b/signal.c
index 7bad8c1d8a..618ed3f52d 100644
--- a/signal.c
+++ b/signal.c
@@ -519,27 +519,21 @@ rb_signal_buff_size(void)
return signal_buff.size;
}
-#if USE_TRAP_MASK
-static sigset_t trap_last_mask;
-#endif
-
#if HAVE_PTHREAD_H
#include <pthread.h>
#endif
-void
+static void
rb_disable_interrupt(void)
{
#if USE_TRAP_MASK
sigset_t mask;
sigfillset(&mask);
- sigdelset(&mask, SIGVTALRM);
- sigdelset(&mask, SIGSEGV);
pthread_sigmask(SIG_SETMASK, &mask, NULL);
#endif
}
-void
+static void
rb_enable_interrupt(void)
{
#if USE_TRAP_MASK
@@ -872,19 +866,10 @@ trap_ensure(struct trap_arg *arg)
{
/* enable interrupt */
pthread_sigmask(SIG_SETMASK, &arg->mask, NULL);
- trap_last_mask = arg->mask;
return 0;
}
#endif
-void
-rb_trap_restore_mask(void)
-{
-#if USE_TRAP_MASK
- pthread_sigmask(SIG_SETMASK, &trap_last_mask, NULL);
-#endif
-}
-
/*
* call-seq:
* Signal.trap( signal, command ) -> obj
@@ -995,7 +980,12 @@ init_sigchld(int sig)
sigset_t mask;
sigset_t fullmask;
- /* disable interrupt */
+ /*
+ * disable interrupt. Otherwise following temmporal signal handler change
+ * has a race.
+ * Note: now we have only single thread, therefore both sigprocmask() and
+ * pthread_sigmask() makes the same effect.
+ */
sigfillset(&fullmask);
pthread_sigmask(SIG_BLOCK, &fullmask, &mask);
#endif
@@ -1010,7 +1000,6 @@ init_sigchld(int sig)
#if USE_TRAP_MASK
sigdelset(&mask, sig);
pthread_sigmask(SIG_SETMASK, &mask, NULL);
- trap_last_mask = mask;
#endif
}
#endif