[gst-devel] large memleaks

Jens Persson xerxes2 at gmail.com
Wed Jun 13 16:02:26 CEST 2007


yes, i can confirm nasty leaks when playing h.264. will investigate more ...
besides this matter i would say that gstreamer is very stable. i've been 
running it 24/7 since 20 january and only found one leak sa far, which 
tim fixed in appr 12 hours so hopefully this will be fixed (fast) too. :D

greets jens

SP GLE wrote:
> 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 
>
> -------------------------------------------------------------------------
> This SF.net email is sponsored by DB2 Express
> Download DB2 Express C - the FREE version of DB2 express and take
> control of your XML. No limits. Just data. Click to get it now.
> http://sourceforge.net/powerbar/db2/
> _______________________________________________
> gstreamer-devel mailing list
> gstreamer-devel at lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/gstreamer-devel
>
>   





More information about the gstreamer-devel mailing list