]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
memory leak fixes
authorTimo Sirainen <tss@iki.fi>
Mon, 3 May 2004 14:37:48 +0000 (17:37 +0300)
committerTimo Sirainen <tss@iki.fi>
Mon, 3 May 2004 14:37:48 +0000 (17:37 +0300)
--HG--
branch : HEAD

src/imap/main.c
src/lib-index/mail-index.c
src/lib-index/mail-transaction-log.c
src/lib-storage/index/index-storage.c

index 0934414e9393045306c6d799be72db85ebc2aca5..eae9a61e7cf4ae8de2026c9e1463c07fa9618b6b 100644 (file)
@@ -153,6 +153,8 @@ static void main_deinit(void)
        random_deinit();
        pool_unref(namespace_pool);
 
+       str_free(capability_string);
+
        closelog();
 }
 
index e012063042c446aba88c6350e62e7910009c6d8f..036fc2c70062abe02e945e3f6bc68efeb6fb44d2 100644 (file)
@@ -30,6 +30,8 @@ struct mail_index *mail_index_alloc(const char *dir, const char *prefix)
 
 void mail_index_free(struct mail_index *index)
 {
+       mail_index_close(index);
+
        i_free(index->error);
        i_free(index->dir);
        i_free(index->prefix);
@@ -564,6 +566,8 @@ int mail_index_open(struct mail_index *index, enum mail_index_open_flags flags)
        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;
@@ -580,8 +584,6 @@ int mail_index_open(struct mail_index *index, enum mail_index_open_flags flags)
                        (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;
index 070d5a171d452175b5bea6e52e8ce29dd6ad283a..dbb7ab0bebfa039726c49238194216a4199abdc2 100644 (file)
@@ -130,6 +130,9 @@ void mail_transaction_log_close(struct mail_transaction_log *log)
 {
        mail_transaction_log_views_close(log);
 
+       log->head->refcount--;
+       mail_transaction_logs_clean(log);
+
        log->index->log = NULL;
        i_free(log);
 }
@@ -222,6 +225,17 @@ mail_transaction_log_file_lock(struct mail_transaction_log_file *file,
 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()");
index 2eb703ec1c08b9530d538bca593e6ec4f7c9c3a2..66ebbe93c2b40d42664957049ac2004449d89e89 100644 (file)
@@ -362,9 +362,8 @@ void index_storage_mailbox_free(struct mailbox *box)
 {
        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)