From: smarry@pantransit.smar.reptiles.org
To: broman@nosc.mil, culliton@clark.net
Cc: debian-devel@lists.debian.org, rc@hawkwind.utcs.toronto.edu
Subject: Re: "rc" shell maintainer?
Date: Thu, 5 Feb 1998 00:01:30 -0500 [thread overview]
Message-ID: <19980205050130.12464.qmail@pantransit.smar.reptiles.org> (raw)
Hello, this is Marc Moorcroft. I joined the list shortly after
running into two problems with rc-1.5b2 under Linux.
One definite bug (reported to Tim Goodwin) will cause rc to spin calling
wait(2) if you do:
{ls & wait} | cat
There is another problem with signal handling that is a little more
complicated. When I upgraded to the 2.0.33 kernel, rc began hanging
occasionally when I interrupted programs, and when I finally got irritated
enough to check it thoroughly, I found that it failed trip.rc at:
kill -2 $pid
The relevant code is rc_wait() in wait.c:
static pid_t rc_wait(int *stat) {
int r;
interrupt_happened = FALSE;
if (!setjmp(slowbuf.j)) {
slow = TRUE;
if (!interrupt_happened)
r = wait(stat);
else
r = -1;
} else
r = -1;
slow = FALSE;
return r;
}
It appears that some of the time, Linux will return from the wait(2)
for the 'kill' process before the signal gets delivered. On Linux
installations where signal(2) has the System V behaviour (system calls
are interrupted for signals that are caught via signal(2)) rc longjmps
out of the signal handler (a rather alarming practice in itself) to the
top of the enclosing code in rc_wait(). The sequence of events appears
to be:
The signal is sent,
the process exits,
wait(2) returns successfully, and
before the longjmp gadgetry can be turned off (slow = FALSE),
the signal handler IMMEDIATELY runs,
longjmps back to the top of the setjmp block,
and the PID that wait(2) returned is lost. rc loops forever calling
wait(2) with no children, waiting for the lost PID to turn up.
I've talked to others who have had different problems on other Linux
installations, where caught signals do not interrupt system calls, as
in BSD. This appears to be due to a difference of opinion between the
libc and glibc people about how signals should behave, but I haven't
investigated it myself.
next reply other threads:[~1998-02-05 21:40 UTC|newest]
Thread overview: 17+ messages / expand[flat|nested] mbox.gz Atom feed top
1998-02-05 5:01 smarry [this message]
1998-02-05 15:25 ` Tom Culliton
1998-02-06 17:45 ` Tim Goodwin
-- strict thread matches above, loose matches on Subject: below --
1998-02-05 19:59 smarry
1998-02-04 21:23 Vincent Broman
1998-02-05 1:17 ` Tom Culliton
1998-02-05 11:46 ` Tim Goodwin
1998-02-05 21:48 ` Vincent Broman
1998-02-06 18:00 ` Tim Goodwin
1998-02-06 22:54 ` Vincent Broman
1998-02-09 20:31 ` Vincent Broman
1998-02-09 23:45 ` Vincent Broman
1998-02-10 23:26 ` Tom Culliton
1998-02-11 10:45 ` Tim Goodwin
1998-02-11 22:23 ` Tom Culliton
1998-02-12 10:23 ` Tim Goodwin
1998-02-11 21:55 ` Vincent Broman
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=19980205050130.12464.qmail@pantransit.smar.reptiles.org \
--to=smarry@pantransit.smar.reptiles.org \
--cc=broman@nosc.mil \
--cc=culliton@clark.net \
--cc=debian-devel@lists.debian.org \
--cc=rc@hawkwind.utcs.toronto.edu \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).