]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
lib-index: Log a warning if transaction log lock is kept over 3 minutes.
authorTimo Sirainen <tss@iki.fi>
Thu, 23 Sep 2010 14:53:09 +0000 (15:53 +0100)
committerTimo Sirainen <tss@iki.fi>
Thu, 23 Sep 2010 14:53:09 +0000 (15:53 +0100)
src/lib-index/mail-transaction-log-file.c
src/lib-index/mail-transaction-log-private.h

index d195ccda67df26373f9b3db9a57f550125dd1f92..f8f023654c7ae1b4e8120dba2da07acf06b80536 100644 (file)
@@ -282,6 +282,7 @@ mail_transaction_log_file_dotlock(struct mail_transaction_log_file *file)
        if (ret > 0) {
                file->log->dotlock_count++;
                file->locked = TRUE;
+               file->lock_created = time(NULL);
                return 0;
        }
        if (ret < 0) {
@@ -344,6 +345,7 @@ int mail_transaction_log_file_lock(struct mail_transaction_log_file *file)
                                 &file->file_lock);
        if (ret > 0) {
                file->locked = TRUE;
+               file->lock_created = time(NULL);
                return 0;
        }
        if (ret < 0) {
@@ -361,6 +363,8 @@ int mail_transaction_log_file_lock(struct mail_transaction_log_file *file)
 
 void mail_transaction_log_file_unlock(struct mail_transaction_log_file *file)
 {
+       unsigned int lock_time;
+
        if (!file->locked)
                return;
 
@@ -369,6 +373,12 @@ void mail_transaction_log_file_unlock(struct mail_transaction_log_file *file)
        if (MAIL_TRANSACTION_LOG_FILE_IN_MEMORY(file))
                return;
 
+       lock_time = time(NULL) - file->lock_created;
+       if (lock_time >= MAIL_TRANSCATION_LOG_LOCK_TIMEOUT) {
+               i_warning("Transaction log file %s was locked for %u seconds",
+                         file->filepath, lock_time);
+       }
+
        if (file->log->index->lock_method == FILE_LOCK_METHOD_DOTLOCK) {
                mail_transaction_log_file_undotlock(file);
                return;
index 09dae1b6e0b290a42602387c372c1a923a6288c0..26fddcde90f1b2f46fda1cb7410bb70a54abac3c 100644 (file)
@@ -73,6 +73,7 @@ struct mail_transaction_log_file {
        struct modseq_cache modseq_cache[LOG_FILE_MODSEQ_CACHE_SIZE];
 
        struct file_lock *file_lock;
+       time_t lock_created;
 
        unsigned int locked:1;
        unsigned int corrupted:1;