Mercurial > dovecot > original-hg > dovecot-2.2
changeset 17072:4ba74eca3099
fs-sis: Memory leak fix.
author | Timo Sirainen <tss@iki.fi> |
---|---|
date | Thu, 19 Dec 2013 21:25:43 +0200 |
parents | 369d8e994372 |
children | 1d8fef81d4b6 |
files | src/lib-fs/fs-sis.c |
diffstat | 1 files changed, 8 insertions(+), 2 deletions(-) [+] |
line wrap: on
line diff
--- a/src/lib-fs/fs-sis.c Thu Dec 19 21:25:28 2013 +0200 +++ b/src/lib-fs/fs-sis.c Thu Dec 19 21:25:43 2013 +0200 @@ -359,9 +359,10 @@ fs_file_last_error(_file)); } else { file->fs_output = fs_write_stream(file->super); - if (file->hash_input == NULL) + if (file->hash_input == NULL) { _file->output = file->fs_output; - else { + o_stream_ref(_file->output); + } else { /* compare if files are equal */ _file->output = o_stream_create_cmp(file->fs_output, file->hash_input); @@ -374,22 +375,27 @@ { struct sis_fs_file *file = (struct sis_fs_file *)_file; + if (o_stream_nfinish(_file->output) < 0) + success = FALSE; if (!success) { if (file->super != NULL) { fs_write_stream_abort(file->super, &file->fs_output); fs_sis_file_copy_error(file); } + o_stream_unref(&_file->output); return -1; } if (file->hash_input != NULL && o_stream_cmp_equals(_file->output) && i_stream_is_eof(file->hash_input)) { + o_stream_unref(&_file->output); if (fs_sis_try_link(file)) { fs_write_stream_abort(file->super, &file->fs_output); return 1; } } + o_stream_unref(&_file->output); if (fs_write_stream_finish(file->super, &file->fs_output) < 0) { fs_sis_file_copy_error(file);