aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKen Sumrall <ksumrall@android.com>2011-10-26 16:56:00 -0700
committerKen Sumrall <ksumrall@android.com>2011-10-26 16:58:27 -0700
commita286480f56012abdb4ef4ddab1c19a5c2316b7b8 (patch)
treebcc2169da254bec93d5c0a35b518f5d36b2d38c4
parentaa75df74db5beffd25821ed6c360c36197d7bac1 (diff)
downloadsystem_core-a286480f56012abdb4ef4ddab1c19a5c2316b7b8.tar.gz
system_core-a286480f56012abdb4ef4ddab1c19a5c2316b7b8.tar.bz2
system_core-a286480f56012abdb4ef4ddab1c19a5c2316b7b8.zip
Fix the class_reset command
The class_reset command used to reset services that had been set to "disabled" in the init.rc file to a non-disabled state. Now, if the service was originally set to "disabled", have the reset command set it back to disabled. Otherwise, set it to the "reset" state as it currently does. Change-Id: I0c10582e46a8e443d4748d9d893ae762b19b653a
-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 7b4a963e..d10ca478 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 2d98c7cd..a91d9d4b 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 fa813b9a..13c94eb9 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) {