[dovecot-cvs] dovecot/src/lib-storage/index/maildir maildir-storage.c,1.39,1.40

cras at procontrol.fi cras at procontrol.fi
Sat Jun 14 21:38:08 EEST 2003


Update of /home/cvs/dovecot/src/lib-storage/index/maildir
In directory danu:/tmp/cvs-serv11274/lib-storage/index/maildir

Modified Files:
	maildir-storage.c 
Log Message:
Close index files before deleting the mailbox.



Index: maildir-storage.c
===================================================================
RCS file: /home/cvs/dovecot/src/lib-storage/index/maildir/maildir-storage.c,v
retrieving revision 1.39
retrieving revision 1.40
diff -u -d -r1.39 -r1.40
--- maildir-storage.c	29 May 2003 22:49:19 -0000	1.39
+++ maildir-storage.c	14 Jun 2003 17:38:06 -0000	1.40
@@ -431,10 +431,14 @@
 	if (storage->index_dir != NULL && *name != '/' && *name != '~' &&
 	    strcmp(storage->index_dir, storage->dir) != 0) {
 		index_dir = t_strconcat(storage->index_dir, "/.", name, NULL);
-		if (unlink_directory(index_dir, TRUE) < 0) {
+		index_storage_destroy_unrefed();
+
+		/* it can fail with some NFS implementations if indexes are
+		   opened by another session.. can't really help it. */
+		if (unlink_directory(index_dir, TRUE) < 0 &&
+		    errno != ENOTEMPTY) {
 			mail_storage_set_critical(storage,
-						  "unlink_directory(%s) "
-						  "failed: %m", index_dir);
+				"unlink_directory(%s) failed: %m", index_dir);
 			return FALSE;
 		}
 	}
@@ -443,24 +447,22 @@
 	while (rename(src, dest) < 0 && count < 2) {
 		if (errno != EEXIST && errno != ENOTEMPTY) {
 			mail_storage_set_critical(storage,
-						  "rename(%s, %s) failed: %m",
-						  src, dest);
+				"rename(%s, %s) failed: %m", src, dest);
 			return FALSE;
 		}
 
 		/* ..dir already existed? delete it and try again */
 		if (unlink_directory(dest, TRUE) < 0) {
 			mail_storage_set_critical(storage,
-						  "unlink_directory(%s) "
-						  "failed: %m", dest);
+				"unlink_directory(%s) failed: %m", dest);
 			return FALSE;
 		}
 		count++;
 	}
 
-	if (unlink_directory(dest, TRUE) < 0) {
-		mail_storage_set_critical(storage, "unlink_directory(%s) "
-					  "failed: %m", dest);
+	if (unlink_directory(dest, TRUE) < 0 && errno != ENOTEMPTY) {
+		mail_storage_set_critical(storage,
+			"unlink_directory(%s) failed: %m", dest);
 
 		/* it's already renamed to ..dir, which means it's deleted
 		   as far as client is concerned. Report success. */



More information about the dovecot-cvs mailing list