summaryrefslogtreecommitdiff
path: root/process.c
diff options
context:
space:
mode:
authormatz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2002-02-25 09:16:25 +0000
committermatz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2002-02-25 09:16:25 +0000
commit6d47b8a9cc988bb210fc44ce991a0212d97296e4 (patch)
tree62abd8947818da9f117b0f2fe552b8b6f6c43a33 /process.c
parentaaa30fd040781355739b5cceb372df46851a2f5b (diff)
* eval.c (method_inspect): should not dump core for unbound
singleton methods. * object.c (rb_mod_to_s): better description. * hash.c (env_select): should path the assoc list. * process.c (rb_syswait): thread kludge; should be fixed to support native thread. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@2128 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'process.c')
-rw-r--r--process.c21
1 files changed, 14 insertions, 7 deletions
diff --git a/process.c b/process.c
index 8da5953573..7f1375dd32 100644
--- a/process.c
+++ b/process.c
@@ -768,29 +768,36 @@ void
rb_syswait(pid)
int pid;
{
+ static int overriding;
RETSIGTYPE (*hfunc)_((int)), (*qfunc)_((int)), (*ifunc)_((int));
int status;
- int i;
+ int i, hooked = Qfalse;
+ if (!overriding) {
#ifdef SIGHUP
- hfunc = signal(SIGHUP, SIG_IGN);
+ hfunc = signal(SIGHUP, SIG_IGN);
#endif
#ifdef SIGQUIT
- qfunc = signal(SIGQUIT, SIG_IGN);
+ qfunc = signal(SIGQUIT, SIG_IGN);
#endif
- ifunc = signal(SIGINT, SIG_IGN);
+ ifunc = signal(SIGINT, SIG_IGN);
+ overriding = Qtrue;
+ hooked = Qtrue;
+ }
do {
i = rb_waitpid(pid, &status, 0);
} while (i == -1 && errno == EINTR);
+ if (hooked) {
#ifdef SIGHUP
- signal(SIGHUP, hfunc);
+ signal(SIGHUP, hfunc);
#endif
#ifdef SIGQUIT
- signal(SIGQUIT, qfunc);
+ signal(SIGQUIT, qfunc);
#endif
- signal(SIGINT, ifunc);
+ signal(SIGINT, ifunc);
+ }
}
static VALUE