aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authormatz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2004-11-30 17:28:17 +0000
committermatz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2004-11-30 17:28:17 +0000
commit1b4f379ba34bb48aa2144ff5a14b07ae4f4bc57e (patch)
tree0f1f7d9c26f9ae4e8de5c071b7ca8b3a5587bd60
parent6f1b13de9904e3c26ebf14e4b5633e4b9f4a01ff (diff)
downloadruby-1b4f379ba34bb48aa2144ff5a14b07ae4f4bc57e.tar.gz
* signal.c (sighandler): call handler immediately only for default
handlers. [ruby-dev:25003] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@7429 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
-rw-r--r--ChangeLog5
-rw-r--r--eval.c2
-rw-r--r--signal.c2
3 files changed, 7 insertions, 2 deletions
diff --git a/ChangeLog b/ChangeLog
index 07302f4628..44b05d7669 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+Wed Dec 1 02:21:02 2004 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * signal.c (sighandler): call handler immediately only for default
+ handlers. [ruby-dev:25003]
+
Tue Nov 30 23:49:12 2004 Nobuyoshi Nakada <nobu@ruby-lang.org>
* io.c (pipe_open): errno should be preserved for rb_sys_fail() when
diff --git a/eval.c b/eval.c
index 1d0d62018f..0462a1e7e3 100644
--- a/eval.c
+++ b/eval.c
@@ -9959,7 +9959,7 @@ static int
rb_thread_switch(n)
int n;
{
- rb_trap_immediate = (curr_thread->flags&0x100)?1:0;
+ rb_trap_immediate = (curr_thread->flags&(1<<8))?1:0;
switch (n) {
case 0:
return 0;
diff --git a/signal.c b/signal.c
index c45d3c95f4..a2ffc088ec 100644
--- a/signal.c
+++ b/signal.c
@@ -417,7 +417,7 @@ sighandler(sig)
ruby_signal(sig, sighandler);
#endif
- if (ATOMIC_TEST(rb_trap_immediate)) {
+ if (trap_list[sig].cmd == 0 && ATOMIC_TEST(rb_trap_immediate)) {
IN_MAIN_CONTEXT(signal_exec, sig);
ATOMIC_SET(rb_trap_immediate, 1);
}