diff options
| author | Colin Cross <ccross@android.com> | 2013-06-14 00:44:17 +0000 |
|---|---|---|
| committer | Gerrit Code Review <noreply-gerritcodereview@google.com> | 2013-06-14 00:44:18 +0000 |
| commit | c620f095fef62114ffdc6c0ed0749c56b5e817b8 (patch) | |
| tree | 24e13b4017aad130ec3ccc67c06d8f81c2cee75f | |
| parent | 6ef0dfecca9fde5abe15ceea30e0615897d7b374 (diff) | |
| parent | e9ab162f30e88d5d9f8a9264d83745b8c3f381ad (diff) | |
| download | system_core-c620f095fef62114ffdc6c0ed0749c56b5e817b8.zip system_core-c620f095fef62114ffdc6c0ed0749c56b5e817b8.tar.gz system_core-c620f095fef62114ffdc6c0ed0749c56b5e817b8.tar.bz2 | |
Merge "init: prevent action being added to the action_queue twice"
| -rw-r--r-- | init/init_parser.c | 7 |
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; |
