From e18377accad411d21f28cbd11e014a047c9946cc Mon Sep 17 00:00:00 2001 From: Roy Marples Date: Wed, 2 May 2007 15:17:03 +0000 Subject: Don't timeout waiting for checkfs and checkroot. Do a better fix later. --- src/librc.c | 36 +++++++++++++++++++++++++----------- 1 file changed, 25 insertions(+), 11 deletions(-) (limited to 'src/librc.c') diff --git a/src/librc.c b/src/librc.c index 7199cd9b..67a4174d 100644 --- a/src/librc.c +++ b/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); -- cgit v1.2.3