Don't timeout waiting for checkfs and checkroot. Do a better fix later.

This commit is contained in:
Roy Marples 2007-05-02 15:17:03 +00:00
parent 9ced77155b
commit e18377acca
2 changed files with 31 additions and 15 deletions

View File

@ -569,21 +569,33 @@ librc_hidden_def(rc_schedule_clear)
bool rc_wait_service (const char *service)
{
char *svc = rc_xstrdup (service);
char *fifo = rc_strcatpaths (RC_SVCDIR, "exclusive", basename (svc),
(char *) NULL);
char *svc;
char *base;
char *fifo;
struct timeval tv;
struct timeval stopat;
struct timeval now;
bool retval = false;
bool forever = false;
if (! service)
return (false);
free (svc);
if (gettimeofday (&stopat, NULL) != 0) {
eerror ("gettimeofday: %s", strerror (errno));
return (false);
}
stopat.tv_sec += WAIT_MAX;
svc = rc_xstrdup (service);
base = basename (svc);
fifo = rc_strcatpaths (RC_SVCDIR, "exclusive", base, (char *) NULL);
/* FIXME: find a better way of doing this
* Maybe a setting in the init script? */
if (strcmp (base, "checkfs") == 0 || strcmp (base, "checkroot") == 0)
forever = true;
free (svc);
while (true) {
if (! rc_exists (fifo)) {
retval = true;
@ -599,14 +611,16 @@ bool rc_wait_service (const char *service)
}
}
/* Don't hang around forever */
if (gettimeofday (&now, NULL) != 0) {
eerror ("gettimeofday: %s", strerror (errno));
break;
}
if (! forever) {
/* Don't hang around forever */
if (gettimeofday (&now, NULL) != 0) {
eerror ("gettimeofday: %s", strerror (errno));
break;
}
if (timercmp (&now, &stopat, >))
break;
if (timercmp (&now, &stopat, >))
break;
}
}
free (fifo);

View File

@ -546,10 +546,12 @@ static void handle_signal (int sig)
/* Only drop into single user mode if we're booting */
run = getenv ("RUNLEVEL");
prev = getenv ("PREVLEVEL");
if ((prev && strcmp (prev, "S") == 0) ||
(run &&
(strcmp (run, "S") == 0 ||
strcmp (run, "1") == 0)))
if ((prev &&
(strcmp (prev, "S") == 0 ||
strcmp (prev, "1") == 0)) ||
(run &&
(strcmp (run, "S") == 0 ||
strcmp (run, "1") == 0)))
single_user ();
exit (EXIT_FAILURE);