diff options
-rwxr-xr-x | init/init.c | 6 | ||||
-rw-r--r-- | init/init.h | 1 | ||||
-rw-r--r-- | init/init_parser.c | 1 |
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) { |