From afe65479c0052b38e080d7d9adaeba7326823dea Mon Sep 17 00:00:00 2001 From: Vsevolod Stakhov Date: Fri, 8 May 2009 16:07:35 +0400 Subject: [PATCH] * Fix memory leak when ref'ing message mime part without unrefing it --- src/expressions.c | 15 +++++++++------ src/message.c | 11 ++++++++++- 2 files changed, 19 insertions(+), 7 deletions(-) diff --git a/src/expressions.c b/src/expressions.c index c0c791907..c7b88adb9 100644 --- a/src/expressions.c +++ b/src/expressions.c @@ -1507,14 +1507,17 @@ rspamd_compare_transfer_encoding (struct worker_task *task, GList *args) } part = g_mime_message_get_mime_part (task->message); - if (part && GMIME_IS_PART (part)) { - part_enc = g_mime_part_get_encoding (GMIME_PART (part)); - g_object_unref (part); + if (part) { + if (GMIME_IS_PART (part)) { + part_enc = g_mime_part_get_encoding (GMIME_PART (part)); - msg_debug ("rspamd_compare_transfer_encoding: got encoding in part: %d and compare with %d", - (int)part_enc, (int)enc_req); + msg_debug ("rspamd_compare_transfer_encoding: got encoding in part: %d and compare with %d", + (int)part_enc, (int)enc_req); + g_object_unref (part); - return part_enc == enc_req; + return part_enc == enc_req; + } + g_object_unref (part); } return FALSE; diff --git a/src/message.c b/src/message.c index f2add5b47..33cf04732 100644 --- a/src/message.c +++ b/src/message.c @@ -397,6 +397,15 @@ mime_foreach_callback (GMimeObject *part, gpointer user_data) } } +static void +destroy_message (void *pointer) +{ + GMimeMessage *msg = pointer; + + msg_debug ("destroy_message: freeing pointer %p", msg); + g_object_unref (msg); +} + int process_message (struct worker_task *task) { @@ -429,7 +438,7 @@ process_message (struct worker_task *task) } task->message = message; - memory_pool_add_destructor (task->task_pool, (pool_destruct_func)g_object_unref, task->message); + memory_pool_add_destructor (task->task_pool, (pool_destruct_func)destroy_message, task->message); #ifdef GMIME24 g_mime_message_foreach (message, mime_foreach_callback, task); -- 2.39.5