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)
|
bool rc_wait_service (const char *service)
|
||||||
{
|
{
|
||||||
char *svc = rc_xstrdup (service);
|
char *svc;
|
||||||
char *fifo = rc_strcatpaths (RC_SVCDIR, "exclusive", basename (svc),
|
char *base;
|
||||||
(char *) NULL);
|
char *fifo;
|
||||||
struct timeval tv;
|
struct timeval tv;
|
||||||
struct timeval stopat;
|
struct timeval stopat;
|
||||||
struct timeval now;
|
struct timeval now;
|
||||||
bool retval = false;
|
bool retval = false;
|
||||||
|
bool forever = false;
|
||||||
|
|
||||||
|
if (! service)
|
||||||
|
return (false);
|
||||||
|
|
||||||
free (svc);
|
|
||||||
if (gettimeofday (&stopat, NULL) != 0) {
|
if (gettimeofday (&stopat, NULL) != 0) {
|
||||||
eerror ("gettimeofday: %s", strerror (errno));
|
eerror ("gettimeofday: %s", strerror (errno));
|
||||||
return (false);
|
return (false);
|
||||||
}
|
}
|
||||||
stopat.tv_sec += WAIT_MAX;
|
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) {
|
while (true) {
|
||||||
if (! rc_exists (fifo)) {
|
if (! rc_exists (fifo)) {
|
||||||
retval = true;
|
retval = true;
|
||||||
@ -599,14 +611,16 @@ bool rc_wait_service (const char *service)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Don't hang around forever */
|
if (! forever) {
|
||||||
if (gettimeofday (&now, NULL) != 0) {
|
/* Don't hang around forever */
|
||||||
eerror ("gettimeofday: %s", strerror (errno));
|
if (gettimeofday (&now, NULL) != 0) {
|
||||||
break;
|
eerror ("gettimeofday: %s", strerror (errno));
|
||||||
}
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
if (timercmp (&now, &stopat, >))
|
if (timercmp (&now, &stopat, >))
|
||||||
break;
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
free (fifo);
|
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 */
|
/* Only drop into single user mode if we're booting */
|
||||||
run = getenv ("RUNLEVEL");
|
run = getenv ("RUNLEVEL");
|
||||||
prev = getenv ("PREVLEVEL");
|
prev = getenv ("PREVLEVEL");
|
||||||
if ((prev && strcmp (prev, "S") == 0) ||
|
if ((prev &&
|
||||||
(run &&
|
(strcmp (prev, "S") == 0 ||
|
||||||
(strcmp (run, "S") == 0 ||
|
strcmp (prev, "1") == 0)) ||
|
||||||
strcmp (run, "1") == 0)))
|
(run &&
|
||||||
|
(strcmp (run, "S") == 0 ||
|
||||||
|
strcmp (run, "1") == 0)))
|
||||||
single_user ();
|
single_user ();
|
||||||
|
|
||||||
exit (EXIT_FAILURE);
|
exit (EXIT_FAILURE);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user