diff --git a/etc/rc.conf.in b/etc/rc.conf.in index eab9c530..55bcb38b 100644 --- a/etc/rc.conf.in +++ b/etc/rc.conf.in @@ -59,9 +59,8 @@ #rc_start_wait=100 # rc_nostop is a list of services which will not stop when changing runlevels. -# Network clients may wish to add network to the list. # This still allows the service itself to be stopped when called directly. -#rc_nostop="network" +#rc_nostop="" # rc will attempt to start crashed services by default. # However, it will not stop them by default as that could bring down other diff --git a/src/rc/rc.c b/src/rc/rc.c index 0a4fba11..0be79011 100644 --- a/src/rc/rc.c +++ b/src/rc/rc.c @@ -607,8 +607,10 @@ do_stop_services(const char *newlevel, bool parallel) else nstop = false; rc_stringlist_free(kwords); - if (nstop) + if (nstop) { + rc_service_mark(service->value, RC_SERVICE_FAILED); continue; + } /* If the service has crashed, skip futher checks and just stop it */ @@ -687,7 +689,9 @@ do_start_services(bool parallel) TAILQ_FOREACH(service, start_services, entries) { state = rc_service_state(service->value); - if (!(state & (RC_SERVICE_STOPPED | RC_SERVICE_FAILED))) { + if (state & RC_SERVICE_FAILED) + continue; + if (!(state & RC_SERVICE_STOPPED)) { if (crashed && rc_service_daemons_crashed(service->value)) rc_service_mark(service->value,