dovecot: Fix ESTALE handling when reading main index.
dovecot at dovecot.org
dovecot at dovecot.org
Sat Sep 15 15:18:59 EEST 2007
details: http://hg.dovecot.org/dovecot/rev/ff48b008150f
changeset: 6390:ff48b008150f
user: Timo Sirainen <tss at iki.fi>
date: Sat Sep 15 15:18:45 2007 +0300
description:
Fix ESTALE handling when reading main index.
diffstat:
3 files changed, 10 insertions(+), 6 deletions(-)
src/lib-index/mail-index-map.c | 13 ++++++++-----
src/lib-index/mail-index-private.h | 1 +
src/lib-index/mail-index.c | 2 +-
diffs (67 lines):
diff -r abbea4e5c128 -r ff48b008150f src/lib-index/mail-index-map.c
--- a/src/lib-index/mail-index-map.c Sat Sep 15 15:17:57 2007 +0300
+++ b/src/lib-index/mail-index-map.c Sat Sep 15 15:18:45 2007 +0300
@@ -688,7 +688,8 @@ mail_index_try_read_map(struct mail_inde
return 1;
}
-static int mail_index_read_map(struct mail_index_map *map, uoff_t file_size)
+static int mail_index_read_map(struct mail_index_map *map, uoff_t file_size,
+ unsigned int *lock_id)
{
struct mail_index *index = map->index;
mail_index_sync_lost_handler_t *const *handlers;
@@ -716,9 +717,8 @@ static int mail_index_read_map(struct ma
break;
/* ESTALE - reopen index file */
- if (close(index->fd) < 0)
- mail_index_set_syscall_error(index, "close()");
- index->fd = -1;
+ mail_index_close_file(index);
+ *lock_id = 0;
ret = mail_index_try_open_only(index);
if (ret <= 0) {
@@ -729,6 +729,9 @@ static int mail_index_read_map(struct ma
}
return -1;
}
+ if (mail_index_lock_shared(index, lock_id) < 0)
+ return -1;
+
if (fstat(index->fd, &st) == 0)
file_size = st.st_size;
else {
@@ -826,7 +829,7 @@ static int mail_index_map_latest_file(st
new_map->rec_map->lock_id = lock_id;
ret = mail_index_mmap(new_map, file_size);
} else {
- ret = mail_index_read_map(new_map, file_size);
+ ret = mail_index_read_map(new_map, file_size, &lock_id);
mail_index_unlock(index, &lock_id);
}
diff -r abbea4e5c128 -r ff48b008150f src/lib-index/mail-index-private.h
--- a/src/lib-index/mail-index-private.h Sat Sep 15 15:17:57 2007 +0300
+++ b/src/lib-index/mail-index-private.h Sat Sep 15 15:18:45 2007 +0300
@@ -237,6 +237,7 @@ int mail_index_create_tmp_file(struct ma
int mail_index_create_tmp_file(struct mail_index *index, const char **path_r);
int mail_index_try_open_only(struct mail_index *index);
+void mail_index_close_file(struct mail_index *index);
int mail_index_reopen_if_changed(struct mail_index *index);
/* Update/rewrite the main index file from index->map */
void mail_index_write(struct mail_index *index, bool want_rotate);
diff -r abbea4e5c128 -r ff48b008150f src/lib-index/mail-index.c
--- a/src/lib-index/mail-index.c Sat Sep 15 15:17:57 2007 +0300
+++ b/src/lib-index/mail-index.c Sat Sep 15 15:18:45 2007 +0300
@@ -402,7 +402,7 @@ int mail_index_open(struct mail_index *i
return 1;
}
-static void mail_index_close_file(struct mail_index *index)
+void mail_index_close_file(struct mail_index *index)
{
if (index->file_lock != NULL)
file_lock_free(&index->file_lock);
More information about the dovecot-cvs
mailing list