diff options
author | Paul Eastham <eastham@google.com> | 2010-12-04 17:29:31 -0800 |
---|---|---|
committer | Paul Eastham <eastham@google.com> | 2010-12-04 17:39:26 -0800 |
commit | 50b3afd9f39619f69dc6f4efc29be88933eb3614 (patch) | |
tree | 3b60bfb8f1850877c918b41adaa095652de3dcd9 /init | |
parent | 7e06476f6daf75946d93972e4187f2d600b51fac (diff) | |
download | system_core-50b3afd9f39619f69dc6f4efc29be88933eb3614.zip system_core-50b3afd9f39619f69dc6f4efc29be88933eb3614.tar.gz system_core-50b3afd9f39619f69dc6f4efc29be88933eb3614.tar.bz2 |
Add "slow_start" keyword to init
This keyword will cause init to wait a few seconds before exec'ing
the target binary. Maybe only useful for hacks and debugging.
Change-Id: I85caa0bcbc0be7e48bd21eb9e31e039c0740c8d5
Diffstat (limited to 'init')
-rwxr-xr-x | init/init.c | 4 | ||||
-rw-r--r-- | init/init.h | 1 | ||||
-rw-r--r-- | init/init_parser.c | 4 | ||||
-rw-r--r-- | init/keywords.h | 1 |
4 files changed, 10 insertions, 0 deletions
diff --git a/init/init.c b/init/init.c index 7aef387..ea7687d 100755 --- a/init/init.c +++ b/init/init.c @@ -196,6 +196,10 @@ void service_start(struct service *svc, const char *dynamic_args) char tmp[32]; int fd, sz; + if (svc->flags & SVC_SLOW_START) { + sleep(5); + } + if (properties_inited()) { get_property_workspace(&fd, &sz); sprintf(tmp, "%d,%d", dup(fd), sz); diff --git a/init/init.h b/init/init.h index 8691335..9a202b7 100644 --- a/init/init.h +++ b/init/init.h @@ -69,6 +69,7 @@ struct svcenvinfo { #define SVC_RESTARTING 0x08 /* waiting to restart */ #define SVC_CONSOLE 0x10 /* requires console */ #define SVC_CRITICAL 0x20 /* will reboot into recovery if keeps crashing */ +#define SVC_SLOW_START 0x40 /* wait a few seconds before starting */ #define NR_SVC_SUPP_GIDS 12 /* twelve supplementary groups */ diff --git a/init/init_parser.c b/init/init_parser.c index d136c28..1b7522c 100644 --- a/init/init_parser.c +++ b/init/init_parser.c @@ -131,6 +131,7 @@ int lookup_keyword(const char *s) if (!strcmp(s, "etkey")) return K_setkey; if (!strcmp(s, "etprop")) return K_setprop; if (!strcmp(s, "etrlimit")) return K_setrlimit; + if (!strcmp(s, "low_start")) return K_slow_start; if (!strcmp(s, "ocket")) return K_socket; if (!strcmp(s, "tart")) return K_start; if (!strcmp(s, "top")) return K_stop; @@ -564,6 +565,9 @@ static void parse_line_service(struct parse_state *state, int nargs, char **args case K_critical: svc->flags |= SVC_CRITICAL; break; + case K_slow_start: + svc->flags |= SVC_SLOW_START; + break; case K_setenv: { /* name value */ struct svcenvinfo *ei; if (nargs < 2) { diff --git a/init/keywords.h b/init/keywords.h index 25315d8..8710523 100644 --- a/init/keywords.h +++ b/init/keywords.h @@ -62,6 +62,7 @@ enum { KEYWORD(setkey, COMMAND, 0, do_setkey) KEYWORD(setprop, COMMAND, 2, do_setprop) KEYWORD(setrlimit, COMMAND, 3, do_setrlimit) + KEYWORD(slow_start, OPTION, 0, 0) KEYWORD(socket, OPTION, 0, 0) KEYWORD(start, COMMAND, 1, do_start) KEYWORD(stop, COMMAND, 1, do_stop) |