summaryrefslogtreecommitdiff
path: root/signal.c
diff options
context:
space:
mode:
authormatz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>1998-03-16 06:37:12 +0000
committermatz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>1998-03-16 06:37:12 +0000
commita94679135080615136be4d83a66b3f964b8d66a4 (patch)
treeb2963b59c8b2377f5c551039abf985092167dc17 /signal.c
parent62fda90d7adf5436d15f9407bed294bd5a4885be (diff)
1.1b9_03 pre2
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/v1_1r@125 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'signal.c')
-rw-r--r--signal.c19
1 files changed, 19 insertions, 0 deletions
diff --git a/signal.c b/signal.c
index e5621b4ec1..f518d597e0 100644
--- a/signal.c
+++ b/signal.c
@@ -358,6 +358,12 @@ struct trap_arg {
VALUE sig, cmd;
};
+# ifdef HAVE_SIGPROCMASK
+static sigset_t trap_last_mask;
+# else
+static int trap_last_mask;
+# endif
+
static RETSIGTYPE
sigexit()
{
@@ -476,9 +482,22 @@ trap_ensure(arg)
#else
sigsetmask(arg->mask);
#endif
+ trap_last_mask = arg->mask;
}
#endif
+void
+trap_restore_mask()
+{
+#ifndef NT
+# ifdef HAVE_SIGPROCMASK
+ sigprocmask(SIG_SETMASK, &trap_last_mask, NULL);
+# else
+ sigsetmask(trap_last_mask);
+# endif
+#endif
+}
+
static VALUE
f_trap(argc, argv)
int argc;