[gst-devel] large memleaks

SP GLE spglegle at yahoo.fr
Wed Jun 13 09:20:15 CEST 2007


Hi,
I'm running my application under valgrind and i have large memleaks.

Summary ::
I have a lot of memory not freed with 'plugin_init()' in backtrace, 
even with use of gst_deinit(),
i looked at sources but found no method to unload previously loaded 
plugins.

I also have large memleaks inside decodebin with typefind and caps 
manipulation (which is may be the most suspicious memleak as caps often
appear in backtraces as memleak) (please see below).

Questions ::
- What can i do to keep only backtrace with real memory leaks ?
- Is there a method to free/unload plugins, in order to easyly
	track memory leaks ?

My valgrind cmd is the following :

{
export G_SLICE=always-malloc
export G_DEBUG=gc-friendly
export GLIBCPP_FORCE_NEW=1
export GLIBCXX_FORCE_NEW=1

DP="/path/to/sources/"
SUPP="--suppressions=/usr/lib/valgrind/glibc-2.3.supp 
--suppressions=${DP}gstreamer/common/gst.supp 
--suppressions=${DP}gst-plugins-base/common/gst.supp
--suppressions=${DP}gst-plugins-good/common/gst.supp 
--suppressions=${DP}gst-plugins-bad/common/gst.supp 
--suppressions=${DP}gst-plugins-ugly/common/gst.supp 
--suppressions=${DP}gst-ffmpeg/common/gst.supp"

OPTS="-v --trace-children=yes --track-fds=yes --time-stamp=yes 
--tool=memcheck --leak-check=full --leak-resolution=high 
--freelist-vol=10000000 --show-reachable=yes --num-callers=40 ${SUPP}"

valgrind $OPTS myapp
}

Regards.

Backtraces ::

For ex., with a ffenc_h263p :

The finalize call is properly done on the element 
	...
0:02:26.480225000 18525 0x8068598 DEBUG        GST_PARENTAGE 
gstelement.c:2859:gst_element_set_bus_func:<ffenc_h263p0> setting bus
to (nil)
0:02:26.480572000 18525 0x8068598 DEBUG              default 
gstelement.c:428:gst_element_set_clock:<ffenc_h263p0> setting clock
(nil)
0:02:26.480639000 18525 0x8068598 LOG        GST_REFCOUNTING 
gstobject.c:325:gst_object_ref:<ffenc_h263p0> 0x8224248 ref 1->2
0:02:26.480672000 18525 0x8068598 LOG        GST_REFCOUNTING 
gstobject.c:870:gst_object_unparent:<ffenc_h263p0> unparent
0:02:26.480704000 18525 0x8068598 LOG        GST_REFCOUNTING 
gstobject.c:352:gst_object_unref:<ffenc_h263p0> 0x8224248 unref 2->1
0:02:26.480741000 18525 0x8068598 LOG        GST_REFCOUNTING 
gstobject.c:352:gst_object_unref:<ffenc_h263p0> 0x8224248 unref 1->0
0:02:26.480774000 18525 0x8068598 INFO       GST_REFCOUNTING 
gstelement.c:2654:gst_element_dispose:<ffenc_h263p0> dispose
0:02:26.480806000 18525 0x8068598 DEBUG              default 
gstelement.c:2659:gst_element_dispose:<ffenc_h263p0> removing 2 pads
0:02:26.480839000 18525 0x8068598 INFO      GST_ELEMENT_PADS 
gstelement.c:746:gst_element_remove_pad:<ffenc_h263p0> removing pad
'src'
0:02:26.480880000 18525 0x8068598 LOG        GST_REFCOUNTING 
gstobject.c:870:gst_object_unparent:<ffenc_h263p0:src> unparent
0:02:26.481335000 18525 0x8068598 INFO      GST_ELEMENT_PADS 
gstelement.c:746:gst_element_remove_pad:<ffenc_h263p0> removing pad
'sink'
0:02:26.481373000 18525 0x8068598 LOG        GST_REFCOUNTING 
gstobject.c:870:gst_object_unparent:<ffenc_h263p0:sink> unparent
0:02:26.481883000 18525 0x8068598 INFO       GST_REFCOUNTING 
gstelement.c:2677:gst_element_dispose:<ffenc_h263p0> parent class
dispose
0:02:26.481961000 18525 0x8068598 LOG        GST_REFCOUNTING 
gstobject.c:438:gst_object_dispose:<ffenc_h263p0> dispose
0:02:26.482031000 18525 0x8068598 INFO       GST_REFCOUNTING 
gstelement.c:2700:gst_element_finalize:<ffenc_h263p0> finalize
0:02:26.482067000 18525 0x8068598 INFO       GST_REFCOUNTING 
gstelement.c:2711:gst_element_finalize:<ffenc_h263p0> finalize parent
0:02:26.482129000 18525 0x8068598 LOG        GST_REFCOUNTING 
gstobject.c:470:gst_object_finalize:<ffenc_h263p0> finalize

but some memory is still reachable :

32,776 bytes in 1 blocks are still reachable in loss record 10,644 of 
10,646
    at 0x4005CBA: memalign (in 
/usr/lib/valgrind/x86-linux/vgpreload_memcheck.so)
    by 0x4005D5F: posix_memalign (in 
/usr/lib/valgrind/x86-linux/vgpreload_memcheck.so)
    by 0x559BDEA: av_malloc (mem.c:64)
    by 0x54DCBD5: av_mallocz (utils.c:64)
    by 0x5479371: init_mv_penalty_and_fcode (h263.c:1783)
    by 0x5479C25: h263_encode_init (h263.c:2028)
    by 0x559F8BE: MPV_encode_init (mpegvideo.c:1329)
    by 0x54DD767: avcodec_open (utils.c:858)
    by 0x53B76DC: gst_ffmpeg_avcodec_open (gstffmpeg.c:49)
    by 0x53BDF98: gst_ffmpegenc_getcaps (gstffmpegenc.c:326)
    by 0x406279A: gst_pad_get_caps_unlocked (gstpad.c:1967)
    by 0x40619EB: gst_pad_link_check_compatible_unlocked 
(gstpad.c:1638)
    by 0x4062071: gst_pad_link_prepare (gstpad.c:1783)
    by 0x40622E8: gst_pad_link (gstpad.c:1858)
    by 0x407D61D: pad_link_maybe_ghosting (gstutils.c:1311)
    by 0x407E056: gst_element_link_pads (gstutils.c:1455)
    by 0x407E622: gst_element_link_pads_filtered (gstutils.c:1643)
    by 0x407E667: gst_element_link (gstutils.c:1666)
    by 0x407E6EB: gst_element_link_many (gstutils.c:1692)

I could suppose it is a memleak inside avcodec but I also have large 
chunks of memory allocated during plugin_init() :

 13,728 bytes in 52 blocks are still reachable in loss record 10,639 of

10,646
    at 0x4005B02: calloc (in 
/usr/lib/valgrind/x86-linux/vgpreload_memcheck.so)
    by 0x43716294: g_malloc0 (in /usr/lib/libglib-2.0.so.0.1200.1)
    by 0x4379BDAE: (within /usr/lib/libgobject-2.0.so.0.1200.1)
    by 0x4379D5A0: g_type_class_ref (in 
/usr/lib/libgobject-2.0.so.0.1200.1)
    by 0x4052F65: gst_element_register (gstelementfactory.c:273)
    by 0x53BFC6A: gst_ffmpegenc_register (gstffmpegenc.c:984)
    by 0x53B79A0: plugin_init (gstffmpeg.c:125)
    by 0x406A90E: gst_plugin_register_func (gstplugin.c:258)
    by 0x406AE46: gst_plugin_load_file (gstplugin.c:454)
    by 0x406B5A2: gst_plugin_load_by_name (gstplugin.c:878)
    by 0x406B9AF: gst_plugin_feature_load (gstpluginfeature.c:113)
    by 0x40532B0: gst_element_factory_create (gstelementfactory.c:366)
    by 0x40535AF: gst_element_factory_make (gstelementfactory.c:454)


I have a lot of memory not freed with 'plugin_init()' in backtrace, 
even with use of gst_deinit(),
i looked at sources but found no method to unload previously loaded 
plugins.

I also have large memleaks inside decodebin with typefind and caps 
manipulation (which is may be the most suspicious
memleak):

 55,280 (2,796 direct, 52,484 indirect) bytes in 233 blocks are 
definitely lost in loss record 9,799 of 10,646
    at 0x40046F2: malloc (in 
/usr/lib/valgrind/x86-linux/vgpreload_memcheck.so)
    by 0x4371620C: g_malloc (in /usr/lib/libglib-2.0.so.0.1200.1)
    by 0x43725551: g_slice_alloc (in /usr/lib/libglib-2.0.so.0.1200.1)
    by 0x436F1D1A: g_ptr_array_sized_new (in 
/usr/lib/libglib-2.0.so.0.1200.1)
    by 0x436F1CF1: g_ptr_array_new (in 
/usr/lib/libglib-2.0.so.0.1200.1)
    by 0x40480E8: gst_static_caps_get (gstcaps.c:460)
    by 0x7F690B7: find_compatibles (gstdecodebin.c:525)
    by 0x7F69929: close_pad_link (gstdecodebin.c:756)
    by 0x7F6B5F6: type_found (gstdecodebin.c:1559)
    by 0x408CFB3: gst_marshal_VOID__UINT_BOXED (gstmarshal.c:507)
    by 0x437845D4: g_closure_invoke (in 
/usr/lib/libgobject-2.0.so.0.1200.1)
    by 0x43796837: (within /usr/lib/libgobject-2.0.so.0.1200.1)
    by 0x437958BB: g_signal_emit_valist (in 
/usr/lib/libgobject-2.0.so.0.1200.1)
    by 0x43795B55: g_signal_emit (in 
/usr/lib/libgobject-2.0.so.0.1200.1)
    by 0x5B6D236: gst_type_find_element_activate 
(gsttypefindelement.c:743)
    by 0x405F5ED: gst_pad_set_active (gstpad.c:648)
    by 0x40519C9: activate_pads (gstelement.c:2446)
    by 0x405C4A8: gst_iterator_fold (gstiterator.c:503)
    by 0x4051A7B: iterator_activate_fold_with_resync 
(gstelement.c:2478)
    by 0x4051B7F: gst_element_pads_activate (gstelement.c:2521)
    by 0x4051D27: gst_element_change_state_func (gstelement.c:2586)
    by 0x5B6D2D4: gst_type_find_element_change_state 
(gsttypefindelement.c:770)
    by 0x405199C: gst_element_change_state (gstelement.c:2362)
    by 0x40514A9: gst_element_set_state_func (gstelement.c:2312)
    by 0x405134C: gst_element_set_state (gstelement.c:2218)
    by 0x4042035: gst_bin_element_set_state (gstbin.c:1955)
    by 0x4042606: gst_bin_change_state_func (gstbin.c:2128)
    by 0x7F6BD2F: gst_decode_bin_change_state (gstdecodebin.c:1694)
    by 0x405199C: gst_element_change_state (gstelement.c:2362)
    by 0x40514A9: gst_element_set_state_func (gstelement.c:2312)
    by 0x405134C: gst_element_set_state (gstelement.c:2218)
    by 0x4042035: gst_bin_element_set_state (gstbin.c:1955)
    by 0x4042606: gst_bin_change_state_func (gstbin.c:2128)
    by 0x406857F: gst_pipeline_change_state (gstpipeline.c:503)
    by 0x405199C: gst_element_change_state (gstelement.c:2362)
    by 0x4050F1E: gst_element_continue_state (gstelement.c:2077)
    by 0x40517D9: gst_element_change_state (gstelement.c:2406)
    by 0x40514A9: gst_element_set_state_func (gstelement.c:2312)
    by 0x405134C: gst_element_set_state (gstelement.c:2218)


18,432 bytes in 151 blocks are indirectly lost in loss record 9,798 of 
10,646
    at 0x4005BEC: realloc (in 
/usr/lib/valgrind/x86-linux/vgpreload_memcheck.so)
    by 0x4371633C: g_realloc (in /usr/lib/libglib-2.0.so.0.1200.1)
    by 0x436F1C9A: (within /usr/lib/libglib-2.0.so.0.1200.1)
    by 0x436F15CB: g_array_append_vals (in 
/usr/lib/libglib-2.0.so.0.1200.1)
    by 0x4071721: gst_structure_set_field (gststructure.c:593)
    by 0x407341C: gst_structure_from_string (gststructure.c:1848)
    by 0x4049F23: gst_caps_from_string_inplace (gstcaps.c:1821)
    by 0x4048107: gst_static_caps_get (gstcaps.c:467)
    by 0x7F690B7: find_compatibles (gstdecodebin.c:525)
    by 0x7F69929: close_pad_link (gstdecodebin.c:756)
    by 0x7F6B5F6: type_found (gstdecodebin.c:1559)
    by 0x408CFB3: gst_marshal_VOID__UINT_BOXED (gstmarshal.c:507)
    by 0x437845D4: g_closure_invoke (in 
/usr/lib/libgobject-2.0.so.0.1200.1)
    by 0x43796837: (within /usr/lib/libgobject-2.0.so.0.1200.1)
    by 0x437958BB: g_signal_emit_valist (in 
/usr/lib/libgobject-2.0.so.0.1200.1)
    by 0x43795B55: g_signal_emit (in 
/usr/lib/libgobject-2.0.so.0.1200.1)
    by 0x5B6D236: gst_type_find_element_activate 
(gsttypefindelement.c:743)
    by 0x405F5ED: gst_pad_set_active (gstpad.c:648)
    by 0x40519C9: activate_pads (gstelement.c:2446)
    by 0x405C4A8: gst_iterator_fold (gstiterator.c:503)
    by 0x4051A7B: iterator_activate_fold_with_resync 
(gstelement.c:2478)
    by 0x4051B7F: gst_element_pads_activate (gstelement.c:2521)
    by 0x4051D27: gst_element_change_state_func (gstelement.c:2586)
    by 0x5B6D2D4: gst_type_find_element_change_state 
(gsttypefindelement.c:770)
    by 0x405199C: gst_element_change_state (gstelement.c:2362)
    by 0x40514A9: gst_element_set_state_func (gstelement.c:2312)
    by 0x405134C: gst_element_set_state (gstelement.c:2218)
    by 0x4042035: gst_bin_element_set_state (gstbin.c:1955)
    by 0x4042606: gst_bin_change_state_func (gstbin.c:2128)
    by 0x7F6BD2F: gst_decode_bin_change_state (gstdecodebin.c:1694)
    by 0x405199C: gst_element_change_state (gstelement.c:2362)
    by 0x40514A9: gst_element_set_state_func (gstelement.c:2312)
    by 0x405134C: gst_element_set_state (gstelement.c:2218)
    by 0x4042035: gst_bin_element_set_state (gstbin.c:1955)
    by 0x4042606: gst_bin_change_state_func (gstbin.c:2128)
    by 0x406857F: gst_pipeline_change_state (gstpipeline.c:503)
    by 0x405199C: gst_element_change_state (gstelement.c:2362)
    by 0x4050F1E: gst_element_continue_state (gstelement.c:2077)
    by 0x40517D9: gst_element_change_state (gstelement.c:2406)
    by 0x40514A9: gst_element_set_state_func (gstelement.c:2312)



 14,848 bytes in 232 blocks are indirectly lost in loss record 9,797 of

10,646
    at 0x40046F2: malloc (in 
/usr/lib/valgrind/x86-linux/vgpreload_memcheck.so)
    by 0x4005B80: realloc (in 
/usr/lib/valgrind/x86-linux/vgpreload_memcheck.so)
    by 0x4371633C: g_realloc (in /usr/lib/libglib-2.0.so.0.1200.1)
    by 0x436F1E36: (within /usr/lib/libglib-2.0.so.0.1200.1)
    by 0x436F229E: g_ptr_array_add (in 
/usr/lib/libglib-2.0.so.0.1200.1)
    by 0x40486BF: gst_caps_append_structure (gstcaps.c:696)
    by 0x4049F38: gst_caps_from_string_inplace (gstcaps.c:1825)
    by 0x4048107: gst_static_caps_get (gstcaps.c:467)
    by 0x7F690B7: find_compatibles (gstdecodebin.c:525)
    by 0x7F69929: close_pad_link (gstdecodebin.c:756)
    by 0x7F6B5F6: type_found (gstdecodebin.c:1559)
    by 0x408CFB3: gst_marshal_VOID__UINT_BOXED (gstmarshal.c:507)
    by 0x437845D4: g_closure_invoke (in 
/usr/lib/libgobject-2.0.so.0.1200.1)
    by 0x43796837: (within /usr/lib/libgobject-2.0.so.0.1200.1)
    by 0x437958BB: g_signal_emit_valist (in 
/usr/lib/libgobject-2.0.so.0.1200.1)
    by 0x43795B55: g_signal_emit (in 
/usr/lib/libgobject-2.0.so.0.1200.1)
    by 0x5B6D236: gst_type_find_element_activate 
(gsttypefindelement.c:743)
    by 0x405F5ED: gst_pad_set_active (gstpad.c:648)
    by 0x40519C9: activate_pads (gstelement.c:2446)
    by 0x405C4A8: gst_iterator_fold (gstiterator.c:503)
    by 0x4051A7B: iterator_activate_fold_with_resync 
(gstelement.c:2478)
    by 0x4051B7F: gst_element_pads_activate (gstelement.c:2521)
    by 0x4051D27: gst_element_change_state_func (gstelement.c:2586)
    by 0x5B6D2D4: gst_type_find_element_change_state 
(gsttypefindelement.c:770)
    by 0x405199C: gst_element_change_state (gstelement.c:2362)
    by 0x40514A9: gst_element_set_state_func (gstelement.c:2312)
    by 0x405134C: gst_element_set_state (gstelement.c:2218)
    by 0x4042035: gst_bin_element_set_state (gstbin.c:1955)
    by 0x4042606: gst_bin_change_state_func (gstbin.c:2128)
    by 0x7F6BD2F: gst_decode_bin_change_state (gstdecodebin.c:1694)
    by 0x405199C: gst_element_change_state (gstelement.c:2362)
    by 0x40514A9: gst_element_set_state_func (gstelement.c:2312)
    by 0x405134C: gst_element_set_state (gstelement.c:2218)
    by 0x4042035: gst_bin_element_set_state (gstbin.c:1955)
    by 0x4042606: gst_bin_change_state_func (gstbin.c:2128)
    by 0x406857F: gst_pipeline_change_state (gstpipeline.c:503)
    by 0x405199C: gst_element_change_state (gstelement.c:2362)
    by 0x4050F1E: gst_element_continue_state (gstelement.c:2077)
    by 0x40517D9: gst_element_change_state (gstelement.c:2406)
    by 0x40514A9: gst_element_set_state_func (gstelement.c:2312)

 4,640 bytes in 232 blocks are indirectly lost in loss record 9,796 of 
10,646
    at 0x40046F2: malloc (in 
/usr/lib/valgrind/x86-linux/vgpreload_memcheck.so)
    by 0x4371620C: g_malloc (in /usr/lib/libglib-2.0.so.0.1200.1)
    by 0x43725551: g_slice_alloc (in /usr/lib/libglib-2.0.so.0.1200.1)
    by 0x436F1478: g_array_sized_new (in 
/usr/lib/libglib-2.0.so.0.1200.1)
    by 0x4070AEF: gst_structure_id_empty_new_with_size 
(gststructure.c:118)
    by 0x4070B72: gst_structure_empty_new (gststructure.c:153)
    by 0x4073377: gst_structure_from_string (gststructure.c:1834)
    by 0x4049F23: gst_caps_from_string_inplace (gstcaps.c:1821)
    by 0x4048107: gst_static_caps_get (gstcaps.c:467)
    by 0x7F690B7: find_compatibles (gstdecodebin.c:525)
    by 0x7F69929: close_pad_link (gstdecodebin.c:756)
    by 0x7F6B5F6: type_found (gstdecodebin.c:1559)
    by 0x408CFB3: gst_marshal_VOID__UINT_BOXED (gstmarshal.c:507)
    by 0x437845D4: g_closure_invoke (in 
/usr/lib/libgobject-2.0.so.0.1200.1)
    by 0x43796837: (within /usr/lib/libgobject-2.0.so.0.1200.1)
    by 0x437958BB: g_signal_emit_valist (in 
/usr/lib/libgobject-2.0.so.0.1200.1)
    by 0x43795B55: g_signal_emit (in 
/usr/lib/libgobject-2.0.so.0.1200.1)
    by 0x5B6D236: gst_type_find_element_activate 
(gsttypefindelement.c:743)
    by 0x405F5ED: gst_pad_set_active (gstpad.c:648)
    by 0x40519C9: activate_pads (gstelement.c:2446)
    by 0x405C4A8: gst_iterator_fold (gstiterator.c:503)
    by 0x4051A7B: iterator_activate_fold_with_resync 
(gstelement.c:2478)
    by 0x4051B7F: gst_element_pads_activate (gstelement.c:2521)
    by 0x4051D27: gst_element_change_state_func (gstelement.c:2586)
    by 0x5B6D2D4: gst_type_find_element_change_state 
(gsttypefindelement.c:770)
    by 0x405199C: gst_element_change_state (gstelement.c:2362)
    by 0x40514A9: gst_element_set_state_func (gstelement.c:2312)
    by 0x405134C: gst_element_set_state (gstelement.c:2218)
    by 0x4042035: gst_bin_element_set_state (gstbin.c:1955)
    by 0x4042606: gst_bin_change_state_func (gstbin.c:2128)
    by 0x7F6BD2F: gst_decode_bin_change_state (gstdecodebin.c:1694)
    by 0x405199C: gst_element_change_state (gstelement.c:2362)
    by 0x40514A9: gst_element_set_state_func (gstelement.c:2312)
    by 0x405134C: gst_element_set_state (gstelement.c:2218)
    by 0x4042035: gst_bin_element_set_state (gstbin.c:1955)
    by 0x4042606: gst_bin_change_state_func (gstbin.c:2128)
    by 0x406857F: gst_pipeline_change_state (gstpipeline.c:503)
    by 0x405199C: gst_element_change_state (gstelement.c:2362)
    by 0x4050F1E: gst_element_continue_state (gstelement.c:2077)
    by 0x40517D9: gst_element_change_state (gstelement.c:2406)




      _____________________________________________________________________________ 
Ne gardez plus qu'une seule adresse mail ! Copiez vos mails vers Yahoo! Mail 




More information about the gstreamer-devel mailing list