summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorColin Cross <ccross@android.com>2013-03-07 22:38:34 +0000
committerAndroid (Google) Code Review <android-gerrit@google.com>2013-03-07 22:38:34 +0000
commit2fa2dfd105204b84a7a32e8fe790793ba23c7f87 (patch)
treea71c3cfb335fd9fdfeb07f454453baee8182d71e
parent598169e7687ea831a495f9fa7dd7677c740d64d3 (diff)
parenta5064626de3e46eed88534f728b01d17d2ae99b7 (diff)
downloadsystem_core-2fa2dfd105204b84a7a32e8fe790793ba23c7f87.zip
system_core-2fa2dfd105204b84a7a32e8fe790793ba23c7f87.tar.gz
system_core-2fa2dfd105204b84a7a32e8fe790793ba23c7f87.tar.bz2
Merge "init: prevent action being added to the action_queue twice" into jb-mr2-dev
-rw-r--r--init/init_parser.c7
1 files changed, 6 insertions, 1 deletions
diff --git a/init/init_parser.c b/init/init_parser.c
index beb9188..686640e 100644
--- a/init/init_parser.c
+++ b/init/init_parser.c
@@ -571,6 +571,7 @@ void queue_builtin_action(int (*func)(int nargs, char **args), char *name)
act = calloc(1, sizeof(*act));
act->name = name;
list_init(&act->commands);
+ list_init(&act->qlist);
cmd = calloc(1, sizeof(*cmd));
cmd->func = func;
@@ -583,7 +584,9 @@ void queue_builtin_action(int (*func)(int nargs, char **args), char *name)
void action_add_queue_tail(struct action *act)
{
- list_add_tail(&action_queue, &act->qlist);
+ if (list_empty(&act->qlist)) {
+ list_add_tail(&action_queue, &act->qlist);
+ }
}
struct action *action_remove_queue_head(void)
@@ -594,6 +597,7 @@ struct action *action_remove_queue_head(void)
struct listnode *node = list_head(&action_queue);
struct action *act = node_to_item(node, struct action, qlist);
list_remove(node);
+ list_init(node);
return act;
}
}
@@ -825,6 +829,7 @@ static void *parse_action(struct parse_state *state, int nargs, char **args)
act = calloc(1, sizeof(*act));
act->name = args[1];
list_init(&act->commands);
+ list_init(&act->qlist);
list_add_tail(&action_list, &act->alist);
/* XXX add to hash */
return act;