aboutsummaryrefslogtreecommitdiff
path: root/src/librc.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/librc.c')
-rw-r--r--src/librc.c36
1 files changed, 25 insertions, 11 deletions
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);