diff options
author | Patrick McHardy <kaber@trash.net> | 2009-03-20 17:42:55 +0100 |
---|---|---|
committer | Patrick McHardy <kaber@trash.net> | 2009-03-20 17:42:55 +0100 |
commit | fc42681eb5872c1ddc3008b35c7c662a46efe8bb (patch) | |
tree | 07dc933c4b5c2ca168f671c4550f0abc9dd02f71 | |
parent | 7feffa0ed35e4125f272edded092b890234a794b (diff) |
Fix some memory leaks
Free nested chain handles and command structures when done.
Signed-off-by: Patrick McHardy <kaber@trash.net>
-rw-r--r-- | src/main.c | 6 | ||||
-rw-r--r-- | src/parser.y | 1 |
2 files changed, 5 insertions, 2 deletions
@@ -183,14 +183,16 @@ int main(int argc, char * const *argv) { struct netlink_ctx ctx; - struct cmd *cmd; + struct cmd *cmd, *next; - list_for_each_entry(cmd, &state.cmds, list) { + list_for_each_entry_safe(cmd, next, &state.cmds, list) { memset(&ctx, 0, sizeof(ctx)); ctx.msgs = &msgs; init_list_head(&ctx.list); if (do_command(&ctx, cmd) < 0) goto out; + list_del(&cmd->list); + cmd_free(cmd); } } out: diff --git a/src/parser.y b/src/parser.y index d9da115a..90f9052e 100644 --- a/src/parser.y +++ b/src/parser.y @@ -576,6 +576,7 @@ table_line : CHAIN chain_identifier chain_block_alloc '{' chain_block '}' { handle_merge(&$3->handle, &$2); + handle_free(&$2); close_scope(state); $$ = $3; } |