Mercurial > dovecot > original-hg > dovecot-1.2
changeset 5915:171c3f89295c HEAD
fd leak fix
author | Timo Sirainen <tss@iki.fi> |
---|---|
date | Sun, 08 Jul 2007 22:57:51 +0300 |
parents | ae731dbf3a6f |
children | d30fa36505fb |
files | src/lib-storage/index/maildir/maildir-uidlist.c |
diffstat | 1 files changed, 13 insertions(+), 10 deletions(-) [+] |
line wrap: on
line diff
--- a/src/lib-storage/index/maildir/maildir-uidlist.c Sun Jul 08 22:54:55 2007 +0300 +++ b/src/lib-storage/index/maildir/maildir-uidlist.c Sun Jul 08 22:57:51 2007 +0300 @@ -208,14 +208,21 @@ return uidlist; } +static void maildir_uidlist_close(struct maildir_uidlist *uidlist) +{ + if (uidlist->fd != -1) { + if (close(uidlist->fd) < 0) + i_error("close(%s) failed: %m", uidlist->fname); + uidlist->fd = -1; + uidlist->fd_ino = 0; + } +} + void maildir_uidlist_deinit(struct maildir_uidlist *uidlist) { i_assert(!UIDLIST_IS_LOCKED(uidlist)); - if (uidlist->fd != -1) { - if (close(uidlist->fd) < 0) - i_error("close(%s) failed: %m", uidlist->fname); - } + maildir_uidlist_close(uidlist); hash_destroy(uidlist->files); if (uidlist->record_pool != NULL) @@ -310,12 +317,7 @@ *retry_r = FALSE; - if (uidlist->fd != -1) { - if (close(uidlist->fd) < 0) - i_error("close(%s) failed: %m", uidlist->fname); - uidlist->fd = -1; - uidlist->fd_ino = 0; - } + maildir_uidlist_close(uidlist); fd = nfs_safe_open(uidlist->fname, O_RDONLY); if (fd == -1) { @@ -683,6 +685,7 @@ (void)close(uidlist->lock_fd); ret = -1; } else { + maildir_uidlist_close(uidlist); uidlist->fd = uidlist->lock_fd; if (fstat(uidlist->fd, &st) < 0) { i_error("fstat(%s) failed: %m", uidlist->fname);