Mercurial > dovecot > original-hg > dovecot-1.2
changeset 1927:7ad1a47c615e HEAD
some more locking fixes
author | Timo Sirainen <tss@iki.fi> |
---|---|
date | Wed, 28 Apr 2004 22:16:23 +0300 |
parents | 982bd89b42fd |
children | 5ca676060080 |
files | src/lib-index/mail-index-lock.c src/lib-index/mail-index-sync-update.c src/lib-index/mail-transaction-log.c |
diffstat | 3 files changed, 10 insertions(+), 4 deletions(-) [+] |
line wrap: on
line diff
--- a/src/lib-index/mail-index-lock.c Wed Apr 28 21:57:13 2004 +0300 +++ b/src/lib-index/mail-index-lock.c Wed Apr 28 22:16:23 2004 +0300 @@ -230,8 +230,10 @@ if (fd == -1) return -1; - if (index->lock_type == F_UNLCK) - (void)mail_index_lock_mprotect(index, F_RDLCK); + if (index->lock_type == F_UNLCK) { + if (mail_index_lock_mprotect(index, F_RDLCK) < 0) + return -1; + } ret = write_full(fd, index->map->hdr, sizeof(*index->map->hdr)); if (ret < 0 || write_full(fd, index->map->records, @@ -288,6 +290,7 @@ return -1; } + (void)mail_index_lock_mprotect(index, F_WRLCK); return 0; } @@ -307,8 +310,10 @@ if (ret < 0) return -1; + if (mail_index_lock_exclusive_copy(index) < 0) + return -1; *lock_id_r = index->lock_id + 1; - return mail_index_lock_exclusive_copy(index); + return 0; } static int mail_index_copy_lock_finish(struct mail_index *index)
--- a/src/lib-index/mail-index-sync-update.c Wed Apr 28 21:57:13 2004 +0300 +++ b/src/lib-index/mail-index-sync-update.c Wed Apr 28 22:16:23 2004 +0300 @@ -220,6 +220,7 @@ map = mail_index_map_to_memory(map); mail_index_unmap(index, index->map); index->map = map; + index->hdr = map->hdr; map->write_to_disk = TRUE; dest_idx = rec.seq1-1;
--- a/src/lib-index/mail-transaction-log.c Wed Apr 28 21:57:13 2004 +0300 +++ b/src/lib-index/mail-transaction-log.c Wed Apr 28 22:16:23 2004 +0300 @@ -332,7 +332,6 @@ index->log_locked = FALSE; return -1; } - index->log_locked = FALSE; ret = mail_index_map(index, FALSE); if (ret > 0) { @@ -347,6 +346,7 @@ } hdr.file_seq = index->hdr->log_file_seq; mail_index_unlock(index, lock_id); + index->log_locked = FALSE; if (ret <= 0) { (void)file_dotlock_delete(path, fd);