summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorPatrick McHardy <kaber@trash.net>2009-03-20 17:42:55 +0100
committerPatrick McHardy <kaber@trash.net>2009-03-20 17:42:55 +0100
commitfc42681eb5872c1ddc3008b35c7c662a46efe8bb (patch)
tree07dc933c4b5c2ca168f671c4550f0abc9dd02f71 /src
parent7feffa0ed35e4125f272edded092b890234a794b (diff)
Fix some memory leaks
Free nested chain handles and command structures when done. Signed-off-by: Patrick McHardy <kaber@trash.net>
Diffstat (limited to 'src')
-rw-r--r--src/main.c6
-rw-r--r--src/parser.y1
2 files changed, 5 insertions, 2 deletions
diff --git a/src/main.c b/src/main.c
index 00f594f6..3daa294e 100644
--- a/src/main.c
+++ b/src/main.c
@@ -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;
}