From cdf5a9b824c01b26285069c2885be986accf50b8 Mon Sep 17 00:00:00 2001
From: Jaroslav Kysela <perex@perex.cz>
Date: Tue, 19 Aug 2008 13:28:22 +0200
Subject: [PATCH] alsactl init - fix memory leaks (valgrind helped)

Signed-off-by: Jaroslav Kysela <perex@perex.cz>
---
 alsactl/alsactl.c    | 1 +
 alsactl/init_parse.c | 6 +++++-
 2 files changed, 6 insertions(+), 1 deletion(-)

diff --git a/alsactl/alsactl.c b/alsactl/alsactl.c
index 6c62ffc..6728fbc 100644
--- a/alsactl/alsactl.c
+++ b/alsactl/alsactl.c
@@ -174,5 +174,6 @@ int main(int argc, char *argv[])
 		res = -ENODEV;
 	}
 
+	snd_config_update_free_global();
 	return res < 0 ? res : 0;
 }
diff --git a/alsactl/init_parse.c b/alsactl/init_parse.c
index 57f9a92..ab6a6f9 100644
--- a/alsactl/init_parse.c
+++ b/alsactl/init_parse.c
@@ -124,13 +124,16 @@ static void free_space(struct space *space)
 		space->ctl_card_info = NULL;
 	}
 	if (space->ctl_handle) {
-		free(space->ctl_handle);
+		snd_hctl_close(space->ctl_handle);
 		space->ctl_handle = NULL;
 	}
 	if (space->rootdir)
 		free(space->rootdir);
 	if (space->program_result)
 		free(space->program_result);
+	if (space->go_to)
+		free(space->go_to);
+	free(space);
 }
 
 struct pair *value_find(struct space *space, const char *key)
@@ -1680,6 +1683,7 @@ static int parse(struct space *space, const char *filename)
 		linenum += linenum_adj;
 	}
 
+	free(line);
 	space->filename = NULL;
 	space->linenum = -1;
 	file_unmap(buf, bufsize);