mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
* process.c (rb_syswait): thread kludge; should be fixed to
support native thread. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_1_6@2129 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
parent
8f800a2452
commit
fb31afc5a2
4 changed files with 34 additions and 22 deletions
23
process.c
23
process.c
|
@ -588,29 +588,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, 0, &status);
|
||||
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
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue