Return to BSD News archive
Path: sserve!manuel!munnari.oz.au!mips!mips!swrinde!cs.utexas.edu!uunet!news.univie.ac.at!news.tu-graz.ac.at!fstgds01!chmr
From: chmr@fstgds01.tu-graz.ac.at (Christoph Robitschko)
Newsgroups: comp.unix.bsd
Subject: Bugs in init.c
Keywords: /sbin/init shutdown
Message-ID: <1992Jul29.122823.5474@news.tu-graz.ac.at>
Date: 29 Jul 92 12:28:23 GMT
Sender: news@news.tu-graz.ac.at (USENET News System)
Organization: Technical University of Graz, Austria
Lines: 55
Nntp-Posting-Host: fstgds01
I have found some bugs in /sbin/init. They caused the following behaviour:
- init didn't execute /etc/rc again if you brought your system to
singleuser and then back up.
- it didn't correctly react on TSTP siglals (which are sent by halt
and reboot). So it killed the user processes, but tried to start
new getty processes immediately, killed the getty processes, but
tried to start new getty processes, ...
- a lost semicolon at the end of a while loop.
The following patch fixes these problems. I have also sent a BUGNFIX.FORM
to ljolitz (about a week ago).
Have fun,
Christoph
cd /usr/src/sbin/init
diff -p init.c.ori init.c
*** init.c.ori Mon Jul 20 16:03:40 1992
--- init.c Mon Jul 20 17:57:51 1992
*************** top:
*** 188,194 ****
execl("/bin/sh", "sh", "/etc/rc", Reboot, (char *)0);
_exit(127);
}
! while(wait(&status) != pid)
/* if we are about to be rebooted, then wait for it */
if (WIFSIGNALED(status) && WTERMSIG(status) == SIGKILL)
--- 188,195 ----
execl("/bin/sh", "sh", "/etc/rc", Reboot, (char *)0);
_exit(127);
}
! Reboot = 0;
! while(wait(&status) != pid);
/* if we are about to be rebooted, then wait for it */
if (WIFSIGNALED(status) && WTERMSIG(status) == SIGKILL)
*************** top:
*** 215,220 ****
--- 216,223 ----
_exit(127);
}
while(wait(&status) != pid);
+ while (drain)
+ pause();
goto top;
}
--
------------------------------------------------------------------------
Christoph M. Robitschko | "the only man who got his work done by Friday
chmr@edvz.tu-graz.ac.at | was Robinson Crusoe."