diff options
author | matz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2005-07-19 08:31:04 +0000 |
---|---|---|
committer | matz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2005-07-19 08:31:04 +0000 |
commit | 20316027872b9a3a70babc884f838f499f1e5746 (patch) | |
tree | ffade6e5d1945bcecdd7236487b5f94a59b501a6 /signal.c | |
parent | 1fb55b9d7704c4e3df0118fe33890b65538dd06a (diff) |
* signal.c (trap): remove sigexit(); handle "EXIT" via sig_exec().
[ruby-dev:26440]
* io.c (rb_io_inspect): replace sprintf() with "%s" format all
over the place by snprintf() to avoid integer overflow.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@8800 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'signal.c')
-rw-r--r-- | signal.c | 28 |
1 files changed, 4 insertions, 24 deletions
@@ -424,6 +424,9 @@ signal_exec(sig) break; } } + else if (trap_list[sig].cmd == Qundef) { + rb_thread_signal_exit(); + } else { rb_thread_trap_eval(trap_list[sig].cmd, sig, trap_list[sig].safe); } @@ -581,29 +584,6 @@ static sigset_t trap_last_mask; static int trap_last_mask; # endif -static RETSIGTYPE sigexit _((int)); -static RETSIGTYPE -sigexit(sig) - int sig; -{ -#if defined(HAVE_NATIVETHREAD) && defined(HAVE_NATIVETHREAD_KILL) - if (!is_ruby_native_thread() && !rb_trap_accept_nativethreads[sig]) { - sigsend_to_ruby_thread(sig); - return; - } -#endif - - if (trap_list[sig].cmd == 0 && ATOMIC_TEST(rb_trap_immediate)) { - IN_MAIN_CONTEXT(signal_exec, sig); - ATOMIC_SET(rb_trap_immediate, 1); - } - else { - ATOMIC_INC(rb_trap_pending); - ATOMIC_INC(trap_pending_list[sig]); - } - rb_thread_signal_exit(); -} - static VALUE trap(arg) struct trap_arg *arg; @@ -643,7 +623,7 @@ trap(arg) break; case 4: if (strncmp(RSTRING(command)->ptr, "EXIT", 4) == 0) { - func = sigexit; + arg->cmd = Qundef; } break; } |