From 91822b42dc7b5eb64cad2626f9fc620a2ee6a2c8 Mon Sep 17 00:00:00 2001 From: Matthew Barnes Date: Wed, 5 Dec 2012 08:19:04 -0500 Subject: Make EMailPartList thread-safe. Exposing data members in the public struct is unwise, especially when EMailPartList is used from multiple threads. Instead keep the members private and provide a set of thread-safe functions to manipulate them. --- modules/prefer-plain/e-mail-display-popup-prefer-plain.c | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) (limited to 'modules/prefer-plain') diff --git a/modules/prefer-plain/e-mail-display-popup-prefer-plain.c b/modules/prefer-plain/e-mail-display-popup-prefer-plain.c index 58969a6b19..2be2532eda 100644 --- a/modules/prefer-plain/e-mail-display-popup-prefer-plain.c +++ b/modules/prefer-plain/e-mail-display-popup-prefer-plain.c @@ -228,10 +228,11 @@ mail_display_popup_prefer_plain_update_actions (EMailDisplayPopupExtension *exte SoupURI *soup_uri; GHashTable *query; EMailPartList *part_list; - GSList *iter; gboolean is_text_plain; const gchar *action_name; EMailDisplayPopupPreferPlain *pp_extension; + GQueue queue = G_QUEUE_INIT; + GList *head, *link; display = E_MAIL_DISPLAY (e_extension_get_extensible ( E_EXTENSION (extension))); @@ -307,10 +308,11 @@ mail_display_popup_prefer_plain_update_actions (EMailDisplayPopupExtension *exte action_name = NULL; part_list = e_mail_display_get_parts_list (display); - for (iter = part_list->list; iter; iter = g_slist_next (iter)) { - EMailPart *p = iter->data; - if (!p) - continue; + e_mail_part_list_queue_parts (part_list, NULL, &queue); + head = g_queue_peek_head_link (&queue); + + for (link = head; link != NULL; link = g_list_next (link)) { + EMailPart *p = link->data; if (g_str_has_prefix (p->id, prefix) && (strstr (p->id, "text_html") || strstr (p->id, "plain_text"))) { @@ -335,6 +337,9 @@ mail_display_popup_prefer_plain_update_actions (EMailDisplayPopupExtension *exte } } + while (!g_queue_is_empty (&queue)) + e_mail_part_unref (g_queue_pop_head (&queue)); + if (action_name) { action = gtk_action_group_get_action ( pp_extension->action_group, action_name); -- cgit v1.2.3