random_deinit();
pool_unref(namespace_pool);
+ str_free(capability_string);
+
closelog();
}
void mail_index_free(struct mail_index *index)
{
+ mail_index_close(index);
+
i_free(index->error);
i_free(index->dir);
i_free(index->prefix);
if (index->opened)
return 0;
+ index->filepath = i_strconcat(index->dir, "/", index->prefix, NULL);
+
do {
index->shared_lock_count = 0;
index->excl_lock_count = 0;
(flags & MAIL_INDEX_OPEN_FLAG_FCNTL_LOCKS_DISABLE) != 0;
index->readonly = FALSE;
- index->filepath = i_strconcat(index->dir, "/",
- index->prefix, NULL);
ret = mail_index_open_files(index, flags);
if (ret <= 0)
break;
{
mail_transaction_log_views_close(log);
+ log->head->refcount--;
+ mail_transaction_logs_clean(log);
+
log->index->log = NULL;
i_free(log);
}
static void
mail_transaction_log_file_close(struct mail_transaction_log_file *file)
{
+ if (file->buffer != NULL)
+ buffer_free(file->buffer);
+
+ if (file->mmap_base != NULL) {
+ if (munmap(file->mmap_base, file->mmap_size) < 0) {
+ mail_index_file_set_syscall_error(file->log->index,
+ file->filepath,
+ "munmap()");
+ }
+ }
+
if (close(file->fd) < 0) {
mail_index_file_set_syscall_error(file->log->index,
file->filepath, "close()");
{
struct index_mailbox *ibox = (struct index_mailbox *) box;
- /* make sure we're unlocked */
if (ibox->view != NULL)
- mail_index_view_unlock(ibox->view);
+ mail_index_view_close(ibox->view);
index_mailbox_check_remove_all(ibox);
if (ibox->index != NULL)