From 9058c6f85dc49f9500e7e67819acfd8c0d2d369c Mon Sep 17 00:00:00 2001 From: Matthew Barnes Date: Wed, 22 May 2013 12:11:59 -0400 Subject: Make EAttachment a little more thread-safe. EAttachment is now used from worker threads by EMailFormatterAttachment, so add some thread-safe accessor functions to eliminate potential races. Added thread-safe functions: e_attachment_dup_disposition() e_attachment_ref_file() e_attachment_ref_file_info() e_attachment_ref_icon() e_attachment_ref_mime_part() e_attachment_dup_description() e_attachment_dup_thumbnail_path() Renamed functions: e_attachment_get_mime_type() -> e_attachment_dup_mime_type() Removed non-thread-safe functions: e_attachment_get_file() e_attachment_get_file_info() e_attachment_get_icon() e_attachment_get_mime_part() e_attachment_get_description() e_attachment_get_thumbnail_path() --- modules/calendar/e-cal-attachment-handler.c | 4 +++- modules/mail/e-mail-attachment-handler.c | 8 ++++++-- 2 files changed, 9 insertions(+), 3 deletions(-) (limited to 'modules') diff --git a/modules/calendar/e-cal-attachment-handler.c b/modules/calendar/e-cal-attachment-handler.c index 343d4bad14..8613fbf169 100644 --- a/modules/calendar/e-cal-attachment-handler.c +++ b/modules/calendar/e-cal-attachment-handler.c @@ -79,7 +79,7 @@ attachment_handler_get_component (EAttachment *attachment) e_attachment_get_saving (attachment)) return NULL; - mime_part = e_attachment_get_mime_part (attachment); + mime_part = e_attachment_ref_mime_part (attachment); if (mime_part == NULL) return NULL; @@ -90,6 +90,8 @@ attachment_handler_get_component (EAttachment *attachment) camel_data_wrapper_decode_to_stream_sync (wrapper, stream, NULL, NULL); g_object_unref (stream); + g_object_unref (mime_part); + if (buffer->len > 0) { const gchar *str; diff --git a/modules/mail/e-mail-attachment-handler.c b/modules/mail/e-mail-attachment-handler.c index d041bc9ad1..5e328c4aab 100644 --- a/modules/mail/e-mail-attachment-handler.c +++ b/modules/mail/e-mail-attachment-handler.c @@ -79,7 +79,7 @@ mail_attachment_handler_get_selected_message (EAttachmentHandler *handler) g_return_val_if_fail (g_list_length (selected) == 1, NULL); attachment = E_ATTACHMENT (selected->data); - mime_part = e_attachment_get_mime_part (attachment); + mime_part = e_attachment_ref_mime_part (attachment); outer_wrapper = camel_medium_get_content (CAMEL_MEDIUM (mime_part)); @@ -128,6 +128,8 @@ exit: if (message == NULL) message = g_object_ref (outer_wrapper); + g_clear_object (&mime_part); + g_list_free_full (selected, (GDestroyNotify) g_object_unref); return message; @@ -477,7 +479,7 @@ mail_attachment_handler_update_actions (EAttachmentView *view, e_attachment_get_saving (attachment)) goto exit; - mime_part = e_attachment_get_mime_part (attachment); + mime_part = e_attachment_ref_mime_part (attachment); if (mime_part != NULL) { CamelMedium *medium; @@ -486,6 +488,8 @@ mail_attachment_handler_update_actions (EAttachmentView *view, medium = CAMEL_MEDIUM (mime_part); content = camel_medium_get_content (medium); visible = CAMEL_IS_MIME_MESSAGE (content); + + g_object_unref (mime_part); } exit: -- cgit v1.2.3