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,
return -1;
}
+ (void)mail_index_lock_mprotect(index, F_WRLCK);
return 0;
}
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)
index->log_locked = FALSE;
return -1;
}
- index->log_locked = FALSE;
ret = mail_index_map(index, FALSE);
if (ret > 0) {
}
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);