diff options
author | kosaki <kosaki@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2011-07-10 17:04:40 +0000 |
---|---|---|
committer | kosaki <kosaki@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2011-07-10 17:04:40 +0000 |
commit | 74b339e9385181844ee44d155ac59c8544e5016c (patch) | |
tree | b7fe34a558012145e0106c159601ead197535ae4 /signal.c | |
parent | 0b6c9402c77692b290537a66517e12bda8f6a6bb (diff) | |
download | ruby-74b339e9385181844ee44d155ac59c8544e5016c.tar.gz |
* 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.c | 27 |
1 files changed, 8 insertions, 19 deletions
@@ -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 |