aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMilan Crha <mcrha@redhat.com>2014-06-18 20:07:09 +0800
committerMilan Crha <mcrha@redhat.com>2014-06-18 20:07:09 +0800
commit9840648ed32492f8d21e7c6de18e5b1b7d0d88d9 (patch)
tree5790def52b15bf414c7a8cdb6bc2e38482f78abc
parent1cb6d79063c889975ee90a36a0fa203e1d17af63 (diff)
downloadgsoc2013-evolution-9840648ed32492f8d21e7c6de18e5b1b7d0d88d9.tar
gsoc2013-evolution-9840648ed32492f8d21e7c6de18e5b1b7d0d88d9.tar.gz
gsoc2013-evolution-9840648ed32492f8d21e7c6de18e5b1b7d0d88d9.tar.bz2
gsoc2013-evolution-9840648ed32492f8d21e7c6de18e5b1b7d0d88d9.tar.lz
gsoc2013-evolution-9840648ed32492f8d21e7c6de18e5b1b7d0d88d9.tar.xz
gsoc2013-evolution-9840648ed32492f8d21e7c6de18e5b1b7d0d88d9.tar.zst
gsoc2013-evolution-9840648ed32492f8d21e7c6de18e5b1b7d0d88d9.zip
Bug 731770 - Sometimes crashes when trying to load images in e-mails
-rw-r--r--mail/e-mail-display.c13
1 files changed, 10 insertions, 3 deletions
diff --git a/mail/e-mail-display.c b/mail/e-mail-display.c
index 7741a40bee..c610636ee9 100644
--- a/mail/e-mail-display.c
+++ b/mail/e-mail-display.c
@@ -505,6 +505,7 @@ mail_display_plugin_widget_requested (WebKitWebView *web_view,
GList *head, *link;
EMailPart *part = NULL;
GtkWidget *widget = NULL;
+ GWeakRef *weakref;
gchar *part_id, *type, *object_uri;
part_id = g_hash_table_lookup (param, "data");
@@ -517,8 +518,14 @@ mail_display_plugin_widget_requested (WebKitWebView *web_view,
display = E_MAIL_DISPLAY (web_view);
- widget = g_hash_table_lookup (display->priv->widgets, part_id);
+ weakref = g_hash_table_lookup (display->priv->widgets, part_id);
+ if (weakref)
+ widget = g_weak_ref_get (weakref);
+
if (widget != NULL) {
+ /* This cannot be the last reference; thread-safety is assured,
+ because this runs in the main thread only. */
+ g_object_unref (widget);
d (printf ("Handeled %s widget request from cache\n", part_id));
return widget;
}
@@ -708,7 +715,7 @@ mail_display_plugin_widget_requested (WebKitWebView *web_view,
g_hash_table_insert (
display->priv->widgets,
- g_strdup (object_uri), g_object_ref (widget));
+ g_strdup (object_uri), e_weak_ref_new (widget));
exit:
if (part != NULL)
@@ -1019,7 +1026,7 @@ mail_display_uri_changed (EMailDisplay *display,
(GHashFunc) g_str_hash,
(GEqualFunc) g_str_equal,
(GDestroyNotify) g_free,
- (GDestroyNotify) g_object_unref);
+ (GDestroyNotify) e_weak_ref_free);
}
static void