# HG changeset patch # User Timo Sirainen # Date 1183924671 -10800 # Node ID 171c3f89295c373bc951382419ebf877c3716366 # Parent ae731dbf3a6fe8e761952cea89bec5a9ce5f7136 fd leak fix diff -r ae731dbf3a6f -r 171c3f89295c src/lib-storage/index/maildir/maildir-uidlist.c --- 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);