[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