changeset 15736:c31ee24e7255

fs-metawrap: Memory leak fixes
author Timo Sirainen <tss@iki.fi>
date Tue, 05 Feb 2013 03:23:46 +0200
parents 275973a62419
children be320a216190
files src/lib-fs/fs-metawrap.c
diffstat 1 files changed, 6 insertions(+), 3 deletions(-) [+]
line wrap: on
line diff
--- a/src/lib-fs/fs-metawrap.c	Tue Feb 05 03:23:30 2013 +0200
+++ b/src/lib-fs/fs-metawrap.c	Tue Feb 05 03:23:46 2013 +0200
@@ -126,7 +126,7 @@
 	} else {
 		file->super_read = file->super;
 	}
-	i_array_init(&file->file.metadata, 8);
+	fs_metadata_init(&file->file);
 	return &file->file;
 }
 
@@ -134,10 +134,11 @@
 {
 	struct metawrap_fs_file *file = (struct metawrap_fs_file *)_file;
 
+	if (file->input != NULL)
+		i_stream_unref(&file->input);
 	if (file->super_read != file->super)
 		fs_file_deinit(&file->super_read);
 	fs_file_deinit(&file->super);
-	array_free(&file->file.metadata);
 	i_free(file->file.path);
 	i_free(file);
 }
@@ -245,6 +246,7 @@
 		return fs_read_stream(file->super, max_buffer_size);
 
 	if (file->input != NULL) {
+		i_stream_ref(file->input);
 		i_stream_seek(file->input, 0);
 		return file->input;
 	}
@@ -253,6 +255,7 @@
 			       I_MAX(max_buffer_size, MAX_METADATA_LINE_LEN));
 	file->input = i_stream_create_metawrap(input, fs_metawrap_callback, file);
 	i_stream_unref(&input);
+	i_stream_ref(file->input);
 	return file->input;
 }
 
@@ -383,8 +386,8 @@
 		i_stream_unref(&input);
 		return -1;
 	}
+	i_stream_unref(&input);
 	if (ret == 0) {
-		i_stream_unref(&input);
 		fs_set_error_async(_file->fs);
 		return -1;
 	}