From e17b3c90f4a2fc285d83a8badd780b258629b853 Mon Sep 17 00:00:00 2001 From: NotZed Date: Thu, 11 May 2000 18:39:53 +0000 Subject: Big bunch o memleaks fixed. 2000-05-11 NotZed * camel-mime-part.c (write_to_stream): Unref the filter after adding it to the filtering stream. * providers/mbox/camel-mbox-summary.c (camel_mbox_summary_finalise): Free the folder path. * camel-folder-summary.c (camel_folder_summary_finalise): Free the summary path. * camel-internet-address.c (internet_decode): Free multiple entry addresses properly. * camel-mime-utils.c (header_decode_mailbox): Plugged another memleak, free text after converting it. (header_decode_addrspec): More leaks plugged. * camel-mime-message.c (finalize): Free message_uid. (finalize): Free the recipients hashtable. svn path=/trunk/; revision=2989 --- camel/ChangeLog | 27 ++++++++++++++++++++++++++ camel/camel-folder-summary.c | 2 ++ camel/camel-internet-address.c | 2 +- camel/camel-mime-message.c | 5 ++++- camel/camel-mime-part.c | 1 + camel/camel-mime-utils.c | 3 +++ camel/providers/mbox/camel-mbox-summary.c | 32 +++++++++++++++++++++---------- 7 files changed, 60 insertions(+), 12 deletions(-) (limited to 'camel') diff --git a/camel/ChangeLog b/camel/ChangeLog index e615c3917f..5385940204 100644 --- a/camel/ChangeLog +++ b/camel/ChangeLog @@ -1,3 +1,24 @@ +2000-05-11 NotZed + + * camel-mime-part.c (write_to_stream): Unref the filter after + adding it to the filtering stream. + + * providers/mbox/camel-mbox-summary.c + (camel_mbox_summary_finalise): Free the folder path. + + * camel-folder-summary.c (camel_folder_summary_finalise): Free the + summary path. + + * camel-internet-address.c (internet_decode): Free multiple entry + addresses properly. + + * camel-mime-utils.c (header_decode_mailbox): Plugged another + memleak, free text after converting it. + (header_decode_addrspec): More leaks plugged. + + * camel-mime-message.c (finalize): Free message_uid. + (finalize): Free the recipients hashtable. + 2000-05-11 * camel-folder-summary.c (camel_folder_summary_finalise): Free @@ -123,6 +144,12 @@ * providers/mbox/camel-mbox-summary.c (camel_mbox_summary_update): Return status. + (camel_mbox_summary_expunge): Force an update of the summary + before we do anything. + (camel_mbox_summary_expunge): Build new xev line in xevnew, and + free that, and consify xev. + (camel_mbox_summary_load): If we are rebuilding from scratch, make + sure we clear the summary content. * camel-stream-filter.c (do_close): We NEED a stream close. diff --git a/camel/camel-folder-summary.c b/camel/camel-folder-summary.c index 516f9335bd..854017daa9 100644 --- a/camel/camel-folder-summary.c +++ b/camel/camel-folder-summary.c @@ -188,6 +188,8 @@ camel_folder_summary_finalise (GtkObject *obj) g_hash_table_foreach(p->filter_charset, free_o_name, 0); g_hash_table_destroy(p->filter_charset); + g_free(s->summary_path); + if (p->filter_index) gtk_object_unref ((GtkObject *)p->filter_index); if (p->filter_64) diff --git a/camel/camel-internet-address.c b/camel/camel-internet-address.c index fdf790dfd5..003cae5b48 100644 --- a/camel/camel-internet-address.c +++ b/camel/camel-internet-address.c @@ -106,7 +106,7 @@ internet_decode (CamelAddress *a, const char *raw) } n = n->next; } - header_address_unref(ha); + header_address_list_clear(&ha); } return 0; } diff --git a/camel/camel-mime-message.c b/camel/camel-mime-message.c index 73d21e7735..7c28949856 100644 --- a/camel/camel-mime-message.c +++ b/camel/camel-mime-message.c @@ -193,9 +193,12 @@ finalize (GtkObject *object) g_free (message->subject); g_free (message->reply_to); g_free (message->from); + + g_free (message->message_uid); g_hash_table_foreach (message->recipients, g_lib_is_uber_crappy_shit, NULL); - + g_hash_table_destroy(message->recipients); + if (message->user_flags) g_hash_table_foreach (message->user_flags, free_key_only, NULL); g_hash_table_destroy(message->user_flags); diff --git a/camel/camel-mime-part.c b/camel/camel-mime-part.c index 279c1139de..af5b5cf6aa 100644 --- a/camel/camel-mime-part.c +++ b/camel/camel-mime-part.c @@ -532,6 +532,7 @@ write_to_stream (CamelDataWrapper *data_wrapper, CamelStream *stream, if (filter) { filter_stream = camel_stream_filter_new_with_stream(stream); camel_stream_filter_add(filter_stream, filter); + gtk_object_unref((GtkObject *)filter); stream = (CamelStream *)filter_stream; } diff --git a/camel/camel-mime-utils.c b/camel/camel-mime-utils.c index 65bbdf32e8..3a2828ff36 100644 --- a/camel/camel-mime-utils.c +++ b/camel/camel-mime-utils.c @@ -1276,6 +1276,7 @@ header_decode_addrspec(const char **in) if (word) { addr = g_string_append(addr, word); header_decode_lwsp(&inptr); + g_free(word); while (*inptr == '.' && word) { inptr++; addr = g_string_append_c(addr, '.'); @@ -1283,6 +1284,7 @@ header_decode_addrspec(const char **in) if (word) { addr = g_string_append(addr, word); header_decode_lwsp(&inptr); + g_free(word); } else { w(g_warning("Invalid address spec: %s", *in)); } @@ -1348,6 +1350,7 @@ header_decode_mailbox(const char **in) text = header_decode_string(pre); name = g_string_append(name, text); g_free(pre); + g_free(text); /* rfc_decode(pre) */ pre = header_decode_word(&inptr); diff --git a/camel/providers/mbox/camel-mbox-summary.c b/camel/providers/mbox/camel-mbox-summary.c index 1fbbbad075..ead844ee66 100644 --- a/camel/providers/mbox/camel-mbox-summary.c +++ b/camel/providers/mbox/camel-mbox-summary.c @@ -123,6 +123,10 @@ camel_mbox_summary_init (CamelMboxSummary *obj) static void camel_mbox_summary_finalise (GtkObject *obj) { + CamelMboxSummary *mbs = (CamelMboxSummary *)obj; + + g_free(mbs->folder_path); + ((GtkObjectClass *)(camel_mbox_summary_parent))->finalize((GtkObject *)obj); } @@ -341,6 +345,7 @@ camel_mbox_summary_load(CamelMboxSummary *mbs, int forceindex) } if (forceindex || camel_folder_summary_load(s) == -1) { + camel_folder_summary_clear(s); ret = summary_rebuild(mbs, 0); } else { minstart = st.st_size; @@ -508,15 +513,22 @@ camel_mbox_summary_expunge(CamelMboxSummary *mbs) int fd=-1, fdout=-1; off_t offset = 0; char *tmpname=0; - char *buffer, *xev = NULL; + char *buffer, *xevnew = NULL; + const char *xev; int len; guint32 uid, flags; int quick = TRUE, work = FALSE; /* make sure we're in sync */ - /*camel_mbox_summary_load(mbs, FALSE); ? */ - count = camel_folder_summary_count(s); + if (count>0) { + CamelMessageInfo *mi = camel_folder_summary_index(s, count-1); + camel_mbox_summary_update(mbs, mi->content->endpos); + } else { + camel_mbox_summary_update(mbs, 0); + } + + /* check if we have any work to do */ d(printf("Performing expunge, %d messages in inbox\n", count)); for (i=0;quick && iinfo.uid, NULL, 10), info->info.flags); + xevnew = header_evolution_encode(strtoul(info->info.uid, NULL, 10), info->info.flags); if (quick) { if (!xevok) { g_error("The summary told me I had an X-Evolution header, but i dont!"); goto error; } - buffer = g_strdup_printf("X-Evolution: %s", xev); + buffer = g_strdup_printf("X-Evolution: %s", xevnew); do { len = write(fd, buffer, strlen(buffer)); } while (len == -1 && errno == EINTR); @@ -619,7 +631,7 @@ camel_mbox_summary_expunge(CamelMboxSummary *mbs) } else { frompos = lseek(fdout, 0, SEEK_CUR); write(fdout, "From -\n", strlen("From -\n")); - if (header_write(fdout, camel_mime_parser_headers_raw(mp), xev) == -1) { + if (header_write(fdout, camel_mime_parser_headers_raw(mp), xevnew) == -1) { d(printf("Error writing to tmp mailbox\n")); goto error; } @@ -634,8 +646,8 @@ camel_mbox_summary_expunge(CamelMboxSummary *mbs) } info->frompos = frompos; offset = bodypos - info->info.content->bodypos; - } - g_free(xev); xev = NULL; + } + g_free(xevnew); xevnew = NULL; camel_mime_parser_drop_step(mp); camel_mime_parser_drop_step(mp); } else { @@ -690,7 +702,7 @@ error: close(fd); close(fdout); - g_free(xev); + g_free(xevnew); if (tmpname) unlink(tmpname); -- cgit v1.2.3