Kostik wrote:
>> 2. I think that in my application has memory leak. 
> And valgrind show about two more leaks:
> ---
> ==5922== 160 bytes in 1 blocks are definitely lost in loss record 23 of 26
> ==5922==    at 0x40237D8: malloc (vg_replace_malloc.c:195)
> ==5922==    by 0x8066AEF: mu_filter_iconv_create (filter_iconv.c:430)
> ==5922==    by 0x80593AF: mu_decode_filter (mutil.c:1331)
> ==5922==    by 0x805EBAE: mu_rfc2047_decode (rfc2047.c:163)
> ==5922==    by 0x8057051: mu_mimehdr_decode_param (mimehdr.c:430)
> ==5922==    by 0x805782C: mu_message_aget_decoded_attachment_name
> (mimehdr.c:636)

Seems this can be fixed by:
--- ./filter_iconv.c.orig       2010-04-14 19:17:01.901309613 +0400
+++ ./filter_iconv.c    2010-04-14 19:17:31.080363254 +0400
@@ -114,6 +114,7 @@
   s->buf = NULL;
   if (s->cd != (iconv_t) -1)
     iconv_close (s->cd);
+  free (s);
 }
---

> ==5922== 3,151 (40 direct, 3,111 indirect) bytes in 1 blocks are definitely
> lost in loss record 26 of 26
> ==5922==    at 0x4022BB5: calloc (vg_replace_malloc.c:418)
> ==5922==    by 0x804EC76: mu_filter_create (filter.c:210)
> ==5922==    by 0x805934F: mu_decode_filter (mutil.c:1324)
> ==5922==    by 0x805EBAE: mu_rfc2047_decode (rfc2047.c:163)
> ==5922==    by 0x8057051: mu_mimehdr_decode_param (mimehdr.c:430)
> ==5922==    by 0x805782C: mu_message_aget_decoded_attachment_name
> (mimehdr.c:636)

It seems more difficult problem for me:

In mutil.c is mu_decode_filter() function. That call mu_filter_create() and
in some case - mu_filter_iconv_create(). And return stream to
mu_rfc2047_decode() in rfc2047.c

It works well while it not call mu_filter_iconv_create().

I add some debug printf() and my log is:
---
filter created (in filter.c)
close filter stream (in rfc2047.c)
filter destroyed (in filter.c)
---
ok, memory is cleaned.


But if mu_filter_iconv_create() called:
---
filter created (in filter.c)
filter_iconv_created (in filter_iconv.c)
close filter stream (in rfc2047.c)
filter_iconv_destroy (in filter_iconv.c)
---
then cleaned only mu_filter_iconv_create() memory, mu_filter_create()
memory not cleaned, because filter destroy (in filter.c) never called.


=kostik

_______________________________________________
Bug-mailutils mailing list
[email protected]
http://lists.gnu.org/mailman/listinfo/bug-mailutils

Reply via email to