Since valgrind[1] came out, I've been applying it to everything I can think of. rc was pretty clean, with one actual (but minor) problem and one non-problem. The actual problem is that it doesn't clear out the sa_mask when calling sigaction, which presumably means that there's a random set of signals masked when calling the signal handler. I'm assuming this isn't a big problem. Maybe it should be sigfillset instead? The non-problem is that it tries to call sigaction on SIGKILL and SIGSTOP. This is ignored by the kernel, but it makes valgrind complain. Here's a patch for both of these: --- rc-1.7/signal.c Thu Nov 1 03:29:10 2001 +++ rc-1.7.jsgf/signal.c Tue Jul 30 23:08:39 2002 @@ -14,6 +14,7 @@ new.sa_handler = handler; new.sa_flags = SA_INTERRUPT; + sigemptyset(&new.sa_mask); sigaction(signum, &new, &old); return old.sa_handler; } @@ -96,6 +97,8 @@ #endif for (i = 1; i < NUMOFSIGNALS; i++) { + if (i == SIGSTOP || i == SIGKILL) + continue; h = sys_signal(i, SIG_IGN); if (h != SIG_IGN && h != SIG_ERR) sys_signal(i, h); J 1: http://developer.kde.org/~sewardj/
> Since valgrind[1] came out, I've been applying it to everything I can > think of. rc was pretty clean, with one actual (but minor) problem and > one non-problem. OK, I'll buy both of these. Thanks! And looking again at the signal code, I found a major booboo (of my own making), which pulled in the horrid longjmp() code on systems where it was needed. With this, and some other problems I've fixed, there have been a few changes since rc-1.7. A summary is appended, and please see my hacking page for further details. http://www.star.le.ac.uk/~tjg/rc/misc/notes So, time for a new snapshot. Here it is: http://www.star.le.ac.uk/~tjg/rc/snap/rc-1.7s20020815.tar.gz Tim. 2002-07-25 Bug: fix globbing of broken symlinks. 2002-07-31 Bug: readline doesn't handle EIO either. 2002-08-15 Bug: variables that are sometimes exported (i.e. $prompt and $version) need to be made exportable if they are inherited from the environment. Portability: don't call sigaction() for SIGKILL or SIGSTOP; don't hand a garbage signal mask to sigaction() (thanks Jeremy Fitzhardinge). Also, remove use of SA_INTERRUPT (SUSv3, BSD, etc. have SA_RESTART with the inverted meaning).