dovecot-2.0: lib-index: Lock timeout setting wasn't actually use...
dovecot at dovecot.org
dovecot at dovecot.org
Thu Sep 2 19:46:59 EEST 2010
details: http://hg.dovecot.org/dovecot-2.0/rev/2dca300aee5c
changeset: 12071:2dca300aee5c
user: Timo Sirainen <tss at iki.fi>
date: Thu Sep 02 17:46:55 2010 +0100
description:
lib-index: Lock timeout setting wasn't actually used in all places.
diffstat:
src/lib-index/mail-index-lock.c | 4 ++--
src/lib-index/mail-transaction-log-file.c | 22 ++++++++++++++--------
src/lib-index/mail-transaction-log-private.h | 7 +++++--
src/lib-index/mail-transaction-log.c | 31 ++++++++++++++-----------------
4 files changed, 35 insertions(+), 29 deletions(-)
diffs (182 lines):
diff -r 2c4bdec44065 -r 2dca300aee5c src/lib-index/mail-index-lock.c
--- a/src/lib-index/mail-index-lock.c Thu Sep 02 17:28:10 2010 +0100
+++ b/src/lib-index/mail-index-lock.c Thu Sep 02 17:46:55 2010 +0100
@@ -154,8 +154,8 @@
return -1;
mail_index_set_error(index,
- "Timeout while waiting for shared lock for index file %s",
- index->filepath);
+ "Timeout (%us) while waiting for shared lock for index file %s",
+ timeout_secs, index->filepath);
index->index_lock_timeout = TRUE;
return -1;
}
diff -r 2c4bdec44065 -r 2dca300aee5c src/lib-index/mail-transaction-log-file.c
--- a/src/lib-index/mail-transaction-log-file.c Thu Sep 02 17:28:10 2010 +0100
+++ b/src/lib-index/mail-transaction-log-file.c Thu Sep 02 17:46:55 2010 +0100
@@ -14,6 +14,7 @@
#define LOG_PREFETCH IO_BLOCK_SIZE
#define MEMORY_LOG_NAME "(in-memory transaction log file)"
+#define LOG_NEW_DOTLOCK_SUFFIX ".newlock"
static int
log_file_set_syscall_error(struct mail_transaction_log_file *file,
@@ -268,13 +269,14 @@
static int
mail_transaction_log_file_dotlock(struct mail_transaction_log_file *file)
{
+ struct dotlock_settings dotlock_set;
int ret;
if (file->log->dotlock_count > 0)
ret = 1;
else {
- ret = file_dotlock_create(&file->log->dotlock_settings,
- file->filepath, 0,
+ mail_transaction_log_get_dotlock_set(file->log, &dotlock_set);
+ ret = file_dotlock_create(&dotlock_set, file->filepath, 0,
&file->log->dotlock);
}
if (ret > 0) {
@@ -288,9 +290,9 @@
}
mail_index_set_error(file->log->index,
- "Timeout while waiting for "
+ "Timeout (%us) while waiting for "
"dotlock for transaction log file %s",
- file->filepath);
+ dotlock_set.timeout, file->filepath);
file->log->index->index_lock_timeout = TRUE;
return -1;
}
@@ -350,8 +352,9 @@
}
mail_index_set_error(file->log->index,
- "Timeout while waiting for lock for transaction log file %s",
- file->filepath);
+ "Timeout (%us) while waiting for lock for "
+ "transaction log file %s",
+ lock_timeout_secs, file->filepath);
file->log->index->index_lock_timeout = TRUE;
return -1;
}
@@ -671,6 +674,7 @@
bool reset)
{
struct mail_index *index = file->log->index;
+ struct dotlock_settings new_dotlock_set;
struct dotlock *dotlock;
mode_t old_mask;
int fd;
@@ -684,11 +688,13 @@
return -1;
}
+ mail_transaction_log_get_dotlock_set(file->log, &new_dotlock_set);
+ new_dotlock_set.lock_suffix = LOG_NEW_DOTLOCK_SUFFIX;
+
/* With dotlocking we might already have path.lock created, so this
filename has to be different. */
old_mask = umask(index->mode ^ 0666);
- fd = file_dotlock_open(&file->log->new_dotlock_settings,
- file->filepath, 0, &dotlock);
+ fd = file_dotlock_open(&new_dotlock_set, file->filepath, 0, &dotlock);
umask(old_mask);
if (fd == -1)
diff -r 2c4bdec44065 -r 2dca300aee5c src/lib-index/mail-transaction-log-private.h
--- a/src/lib-index/mail-transaction-log-private.h Thu Sep 02 17:28:10 2010 +0100
+++ b/src/lib-index/mail-transaction-log-private.h Thu Sep 02 17:46:55 2010 +0100
@@ -2,9 +2,10 @@
#define MAIL_TRANSACTION_LOG_VIEW_H
#include "buffer.h"
-#include "file-dotlock.h"
#include "mail-transaction-log.h"
+struct dotlock_settings;
+
/* Synchronization can take a while sometimes, especially when copying lots of
mails. */
#define MAIL_TRANSCATION_LOG_LOCK_TIMEOUT (3*60)
@@ -91,7 +92,6 @@
struct mail_transaction_log_file *open_file;
unsigned int dotlock_count;
- struct dotlock_settings dotlock_settings, new_dotlock_settings;
struct dotlock *dotlock;
unsigned int nfs_flush:1;
@@ -102,6 +102,9 @@
const char *fmt, ...)
ATTR_FORMAT(2, 3);
+void mail_transaction_log_get_dotlock_set(struct mail_transaction_log *log,
+ struct dotlock_settings *set_r);
+
struct mail_transaction_log_file *
mail_transaction_log_file_alloc_in_memory(struct mail_transaction_log *log);
struct mail_transaction_log_file *
diff -r 2c4bdec44065 -r 2dca300aee5c src/lib-index/mail-transaction-log.c
--- a/src/lib-index/mail-transaction-log.c Thu Sep 02 17:28:10 2010 +0100
+++ b/src/lib-index/mail-transaction-log.c Thu Sep 02 17:46:55 2010 +0100
@@ -14,8 +14,6 @@
#include <stdio.h>
#include <sys/stat.h>
-#define LOG_NEW_DOTLOCK_SUFFIX ".newlock"
-
static void
mail_transaction_log_set_head(struct mail_transaction_log *log,
struct mail_transaction_log_file *file)
@@ -36,15 +34,6 @@
log = i_new(struct mail_transaction_log, 1);
log->index = index;
-
- log->dotlock_settings.timeout =
- I_MIN(MAIL_TRANSCATION_LOG_LOCK_TIMEOUT,
- index->max_lock_timeout_secs);;
- log->dotlock_settings.stale_timeout =
- MAIL_TRANSCATION_LOG_LOCK_CHANGE_TIMEOUT;
-
- log->new_dotlock_settings = log->dotlock_settings;
- log->new_dotlock_settings.lock_suffix = LOG_NEW_DOTLOCK_SUFFIX;
return log;
}
@@ -84,12 +73,6 @@
set them here: */
log->nfs_flush =
(log->index->flags & MAIL_INDEX_OPEN_FLAG_NFS_FLUSH) != 0;
- log->dotlock_settings.use_excl_lock =
- log->dotlock_settings.nfs_flush =
- (log->index->flags & MAIL_INDEX_OPEN_FLAG_DOTLOCK_USE_EXCL) != 0;
- log->dotlock_settings.nfs_flush =
- log->new_dotlock_settings.nfs_flush =
- log->nfs_flush;
if (log->open_file != NULL)
mail_transaction_log_file_free(&log->open_file);
@@ -536,3 +519,17 @@
*mtime_r = st.st_mtime;
return 0;
}
+
+void mail_transaction_log_get_dotlock_set(struct mail_transaction_log *log,
+ struct dotlock_settings *set_r)
+{
+ struct mail_index *index = log->index;
+
+ memset(set_r, 0, sizeof(*set_r));
+ set_r->timeout = I_MIN(MAIL_TRANSCATION_LOG_LOCK_TIMEOUT,
+ index->max_lock_timeout_secs);
+ set_r->stale_timeout = MAIL_TRANSCATION_LOG_LOCK_CHANGE_TIMEOUT;
+ set_r->nfs_flush = (index->flags & MAIL_INDEX_OPEN_FLAG_NFS_FLUSH) != 0;
+ set_r->use_excl_lock =
+ (index->flags & MAIL_INDEX_OPEN_FLAG_DOTLOCK_USE_EXCL) != 0;
+}
More information about the dovecot-cvs
mailing list