summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rwxr-xr-xinit/init.c6
-rw-r--r--init/init.h1
-rw-r--r--init/init_parser.c1
3 files changed, 7 insertions, 1 deletions
diff --git a/init/init.c b/init/init.c
index 7b4a963e0..d10ca478c 100755
--- a/init/init.c
+++ b/init/init.c
@@ -315,7 +315,11 @@ static void service_stop_or_reset(struct service *svc, int how)
/* if the service has not yet started, prevent
* it from auto-starting with its class
*/
- svc->flags |= how;
+ if (how == SVC_RESET) {
+ svc->flags |= (svc->flags & SVC_RC_DISABLED) ? SVC_DISABLED : SVC_RESET;
+ } else {
+ svc->flags |= how;
+ }
if (svc->pid) {
NOTICE("service '%s' is being killed\n", svc->name);
diff --git a/init/init.h b/init/init.h
index 2d98c7cd7..a91d9d4b5 100644
--- a/init/init.h
+++ b/init/init.h
@@ -71,6 +71,7 @@ struct svcenvinfo {
#define SVC_CRITICAL 0x20 /* will reboot into recovery if keeps crashing */
#define SVC_RESET 0x40 /* Use when stopping a process, but not disabling
so it can be restarted with its class */
+#define SVC_RC_DISABLED 0x80 /* Remember if the disabled flag was set in the rc script */
#define NR_SVC_SUPP_GIDS 12 /* twelve supplementary groups */
diff --git a/init/init_parser.c b/init/init_parser.c
index fa813b9a9..13c94eb97 100644
--- a/init/init_parser.c
+++ b/init/init_parser.c
@@ -499,6 +499,7 @@ static void parse_line_service(struct parse_state *state, int nargs, char **args
break;
case K_disabled:
svc->flags |= SVC_DISABLED;
+ svc->flags |= SVC_RC_DISABLED;
break;
case K_ioprio:
if (nargs != 3) {