[evolution/gnome-3-6] EMailDisplay lefts opened file handles to downloaded images
- From: Milan Crha <mcrha src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [evolution/gnome-3-6] EMailDisplay lefts opened file handles to downloaded images
- Date: Thu, 22 Nov 2012 18:34:01 +0000 (UTC)
commit c7f5afb6d91791c637c12083b9ef54d80283495e
Author: Milan Crha <mcrha redhat com>
Date: Thu Nov 22 19:33:31 2012 +0100
EMailDisplay lefts opened file handles to downloaded images
This fixes three things:
a) mail_display_resource_requested() was leaking file handles on downloaded images
b) it's not necessary to open files, it's enough to test whether file exists
c) mail_display_button_press_event() used incorrect key for "http" cache
mail/e-mail-display.c | 48 ++++++++++++++++++++++++++----------------------
1 files changed, 26 insertions(+), 22 deletions(-)
---
diff --git a/mail/e-mail-display.c b/mail/e-mail-display.c
index a544518..9cbc983 100644
--- a/mail/e-mail-display.c
+++ b/mail/e-mail-display.c
@@ -85,7 +85,7 @@ enum {
PROP_HEADERS_COLLAPSED,
};
-static CamelDataCache *emd_global_http_cache = 0;
+static CamelDataCache *emd_global_http_cache = NULL;
static const gchar *ui =
"<ui>"
@@ -179,6 +179,25 @@ formatter_image_loading_policy_changed_cb (GObject *object,
e_mail_display_reload (display);
}
+static gboolean
+mail_display_image_exists_in_cache (const gchar *image_uri)
+{
+ gchar *image_filename, *uri_md5;
+ gboolean exists;
+
+ g_return_val_if_fail (emd_global_http_cache != NULL, FALSE);
+
+ uri_md5 = g_compute_checksum_for_string (G_CHECKSUM_MD5, image_uri, -1);
+ image_filename = camel_data_cache_get_filename (emd_global_http_cache, "http", uri_md5);
+
+ exists = image_filename && g_file_test (image_filename, G_FILE_TEST_EXISTS);
+
+ g_free (uri_md5);
+ g_free (image_filename);
+
+ return exists;
+}
+
static void
mail_display_update_formatter_colors (EMailDisplay *display)
{
@@ -360,23 +379,18 @@ mail_display_resource_requested (WebKitWebView *web_view,
gchar *new_uri, *mail_uri, *enc;
SoupURI *soup_uri;
GHashTable *query;
- gchar *uri_md5;
- CamelStream *stream;
+ gboolean image_exists;
EMailImageLoadingPolicy image_policy;
- /* Open Evolution's cache */
- uri_md5 = g_compute_checksum_for_string (
- G_CHECKSUM_MD5, uri, -1);
- stream = camel_data_cache_get (
- emd_global_http_cache, "http", uri_md5, NULL);
- g_free (uri_md5);
+ /* Check Evolution's cache */
+ image_exists = mail_display_image_exists_in_cache (uri);
/* If the URI is not cached and we are not allowed to load it
* then redirect to invalid URI, so that webkit would display
* a native placeholder for it. */
image_policy = e_mail_formatter_get_image_loading_policy (
display->priv->formatter);
- if (!stream && !display->priv->force_image_load &&
+ if (!image_exists && !display->priv->force_image_load &&
(image_policy == E_MAIL_IMAGE_LOADING_POLICY_NEVER)) {
webkit_network_request_set_uri (request, "about:blank");
return;
@@ -1386,18 +1400,8 @@ mail_display_button_press_event (GtkWidget *widget,
if ((context & WEBKIT_HIT_TEST_RESULT_CONTEXT_IMAGE)) {
visible = image_src && g_str_has_prefix (image_src, "cid:");
- if (!visible && image_src) {
- CamelStream *image_stream;
-
- image_stream = camel_data_cache_get (
- emd_global_http_cache, "http",
- image_src, NULL);
-
- visible = (image_stream != NULL);
-
- if (image_stream != NULL)
- g_object_unref (image_stream);
- }
+ if (!visible && image_src)
+ visible = mail_display_image_exists_in_cache (image_src);
if (image_src != NULL)
g_free (image_src);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]