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);