Don't timeout waiting for checkfs and checkroot. Do a better fix later.
This commit is contained in:
parent
9ced77155b
commit
e18377acca
36
src/librc.c
36
src/librc.c
@ -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);
|
||||
|
10
src/rc.c
10
src/rc.c
@ -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);
|
||||
|
Loading…
x
Reference in New Issue
Block a user