dovecot-2.2: fs-metawrap: Memory leak fixes

dovecot at dovecot.org dovecot at dovecot.org
Tue Feb 5 03:24:58 EET 2013


details:   http://hg.dovecot.org/dovecot-2.2/rev/c31ee24e7255
changeset: 15736:c31ee24e7255
user:      Timo Sirainen <tss at iki.fi>
date:      Tue Feb 05 03:23:46 2013 +0200
description:
fs-metawrap: Memory leak fixes

diffstat:

 src/lib-fs/fs-metawrap.c |  9 ++++++---
 1 files changed, 6 insertions(+), 3 deletions(-)

diffs (51 lines):

diff -r 275973a62419 -r c31ee24e7255 src/lib-fs/fs-metawrap.c
--- 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;
 	}


More information about the dovecot-cvs mailing list