rc does not need SIGCHLD handler. Also, always return 0 in /etc/rc as non zero for default may freeze system.

This commit is contained in:
Roy Marples 2007-04-09 17:11:18 +00:00
parent 3c7c1736b7
commit 89ac4eee26
2 changed files with 9 additions and 17 deletions

View File

@ -11,4 +11,12 @@
RUNLEVEL="1" /sbin/rc sysinit || exit 1 RUNLEVEL="1" /sbin/rc sysinit || exit 1
RUNLEVEL="1" /sbin/rc boot || exit 1 RUNLEVEL="1" /sbin/rc boot || exit 1
/sbin/rc default || exit 1 PREVLEVEL="1" /sbin/rc default
# If we return non zero after starting rc then 2 things may happen
# 1) We get the message "init: can't get /dev/console for controlling terminal"
# every few seconds
# 2) We get no error and console freezes.
# This is probably a bug somewhere in rc, but until that is fixed we have to
# return 0.
exit 0

View File

@ -458,26 +458,11 @@ static void wait_for_services ()
static void handle_signal (int sig) static void handle_signal (int sig)
{ {
pid_t pid;
int status;
int serrno = errno; int serrno = errno;
char signame[10] = { '\0' }; char signame[10] = { '\0' };
switch (sig) switch (sig)
{ {
case SIGCHLD:
do
{
pid = waitpid (-1, &status, WNOHANG);
if (pid < 0)
{
if (errno && errno != ECHILD)
eerror ("waitpid: %s", strerror (errno));
return;
}
} while (! WIFEXITED (status) && ! WIFSIGNALED (status));
break;
case SIGINT: case SIGINT:
if (! signame[0]) if (! signame[0])
snprintf (signame, sizeof (signame), "SIGINT"); snprintf (signame, sizeof (signame), "SIGINT");
@ -557,7 +542,6 @@ int main (int argc, char **argv)
signal (SIGINT, handle_signal); signal (SIGINT, handle_signal);
signal (SIGQUIT, handle_signal); signal (SIGQUIT, handle_signal);
signal (SIGTERM, handle_signal); signal (SIGTERM, handle_signal);
signal (SIGCHLD, handle_signal);
/* Ensure our environment is pure /* Ensure our environment is pure
Also, add our configuration to it */ Also, add our configuration to it */