diff options
author | David Woodhouse <David.Woodhouse@intel.com> | 2010-07-14 18:54:01 +0800 |
---|---|---|
committer | David Woodhouse <David.Woodhouse@intel.com> | 2010-07-15 23:48:45 +0800 |
commit | 8ae4bf802aac4218ebfbe10cae09693ba64c05f3 (patch) | |
tree | 4e50ee1855cdf96f5b936040dcafded1b312959f /mail/em-composer-utils.c | |
parent | 1e6adfccc83fdbf7862fabd883ca1ba8d9a848c2 (diff) | |
download | gsoc2013-evolution-8ae4bf802aac4218ebfbe10cae09693ba64c05f3.tar.gz gsoc2013-evolution-8ae4bf802aac4218ebfbe10cae09693ba64c05f3.tar.zst gsoc2013-evolution-8ae4bf802aac4218ebfbe10cae09693ba64c05f3.zip |
Fix two memory leaks when replying
1: em_utils_reply_to_message() can be passed a newly-created message (from
a current selection. It needs to unref it. Which means that when we pass it
a message which *isn't* newly-created, we have to obtain a ref of our own.
It was that or add a boolean parameter to tell it whether to unref or not.
2: emf_finalize() wasn't unreferencing emf->message -- so when we clone
the EMFormat in em_utils_message_to_html() and immediately unreference the
clone, a refcount on the message got leaked. Fix emf_finalize() to unref
emf->message as presumably it should.
Diffstat (limited to 'mail/em-composer-utils.c')
-rw-r--r-- | mail/em-composer-utils.c | 10 |
1 files changed, 7 insertions, 3 deletions
diff --git a/mail/em-composer-utils.c b/mail/em-composer-utils.c index e077e27e76..4884432492 100644 --- a/mail/em-composer-utils.c +++ b/mail/em-composer-utils.c @@ -2200,9 +2200,12 @@ reply_to_message(CamelFolder *folder, const gchar *uid, CamelMimeMessage *messag { struct _reply_data *rd = user_data; - if (message != NULL) + if (message != NULL) { + /* get_message_free() will also unref the message, so we need + an extra ref for em_utils_reply_to_message() to drop. */ + g_object_ref(message); em_utils_reply_to_message(folder, uid, message, rd->mode, rd->source); - + } if (rd->source) g_object_unref(rd->source); g_free(rd); @@ -2223,7 +2226,7 @@ reply_to_message(CamelFolder *folder, const gchar *uid, CamelMimeMessage *messag * * If @message is non null, then it is used directly, @folder and @uid * may be supplied in order to update the message flags once it has - * been replied to. + * been replied to. Note that @message will be unreferenced on completion. **/ EMsgComposer * em_utils_reply_to_message(CamelFolder *folder, const gchar *uid, CamelMimeMessage *message, gint mode, EMFormat *source) @@ -2286,6 +2289,7 @@ em_utils_reply_to_message(CamelFolder *folder, const gchar *uid, CamelMimeMessag composer_set_body (composer, message, source); + g_object_unref(message); emcs = g_object_get_data (G_OBJECT (composer), "emcs"); emcs_set_folder_info (emcs, folder, uid, flags, flags); |