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
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 @@
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 @@
#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 @@
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 @@
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 @@
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)