]> source.dussan.org Git - rspamd.git/commitdiff
* Remove several memory leaks (found by valgrind)
authorVsevolod Stakhov <vsevolod@rambler-co.ru>
Fri, 6 Mar 2009 14:48:31 +0000 (17:48 +0300)
committerVsevolod Stakhov <vsevolod@rambler-co.ru>
Fri, 6 Mar 2009 14:48:31 +0000 (17:48 +0300)
src/message.c
src/worker.c

index c2651bdc8115565b66eb04ae7abce868a609e3f5..7d30f53f9e27b1f71d9fc5a038894166add646c2 100644 (file)
@@ -329,8 +329,12 @@ process_message (struct worker_task *task)
        GMimeMessage *message;
        GMimeParser *parser;
        GMimeStream *stream;
-
-       stream = g_mime_stream_mem_new_with_buffer (task->msg->begin, task->msg->len);
+       GByteArray *tmp;
+    
+       tmp = memory_pool_alloc (task->task_pool, sizeof (GByteArray));
+       tmp->data = task->msg->begin;
+       tmp->len = task->msg->len;
+       stream = g_mime_stream_mem_new_with_byte_array (tmp);
        msg_debug ("process_message: construct mime parser from string length %ld", (long int)task->msg->len);
        /* create a new parser object to parse the stream */
        parser = g_mime_parser_new_with_stream (stream);
@@ -433,8 +437,13 @@ process_learn (struct controller_session *session)
        GMimeMessage *message;
        GMimeParser *parser;
        GMimeStream *stream;
+       GByteArray *tmp;
+    
+       tmp = memory_pool_alloc (session->session_pool, sizeof (GByteArray));
+       tmp->data = session->learn_buf->begin;
+       tmp->len = session->learn_buf->len;
+       stream = g_mime_stream_mem_new_with_byte_array (tmp);
 
-       stream = g_mime_stream_mem_new_with_buffer (session->learn_buf->begin, session->learn_buf->len);
        /* create a new parser object to parse the stream */
        parser = g_mime_parser_new_with_stream (stream);
 
@@ -446,14 +455,14 @@ process_learn (struct controller_session *session)
        
        memory_pool_add_destructor (session->session_pool, (pool_destruct_func)g_object_unref, message);
 
-       /* free the parser (and the stream) */
-       g_object_unref (parser);
-
 #ifdef GMIME24
        g_mime_message_foreach (message, mime_learn_foreach_callback, session);
 #else
        g_mime_message_foreach_part (message, mime_learn_foreach_callback, session);
 #endif
+
+       /* free the parser (and the stream) */
+       g_object_unref (parser);
        
        return 0;
 }
index 8e1225024dd6666e04f07f19a3f2c79c59b4e877..53a4db087182895f113eb5ba700e5c52aaff4c65 100644 (file)
@@ -107,7 +107,7 @@ free_task (struct worker_task *task, gboolean is_soft)
                while ((part = g_list_first (task->parts))) {
                        task->parts = g_list_remove_link (task->parts, part);
                        p = (struct mime_part *)part->data;
-                       g_byte_array_free (p->content, FALSE);
+                       g_byte_array_free (p->content, TRUE);
                        g_list_free_1 (part);
                }
                memory_pool_delete (task->task_pool);