GNOME Bugzilla – Bug 753262
rsvgdec: Leaks output state
Last modified: 2015-08-16 13:38:25 UTC
Bug #748608 uncovered a few leaks, I found one to be in the rsvg plugin, patch coming. ==1526== 48,518 (23,184 direct, 25,334 indirect) bytes in 69 blocks are definitely lost in loss record 9,556 of 9,586 ==1526== at 0x4A06C50: malloc (in /usr/lib64/valgrind/vgpreload_memcheck-amd64-linux.so) ==1526== by 0x5F7B689: g_malloc (gmem.c:97) ==1526== by 0x5F924D2: g_slice_alloc (gslice.c:1007) ==1526== by 0x5F92B6D: g_slice_alloc0 (gslice.c:1032) ==1526== by 0x16E8E350: _new_output_state (gstvideodecoder.c:729) ==1526== by 0x16E8E350: gst_video_decoder_set_output_state (gstvideodecoder.c:3385) ==1526== by 0x1A75092D: gst_rsvg_decode_image (gstrsvgdec.c:185) ==1526== by 0x1A751041: gst_rsvg_dec_handle_frame (gstrsvgdec.c:342) ==1526== by 0x16E85A65: gst_video_decoder_decode_frame (gstvideodecoder.c:3317) ==1526== by 0x16E8DCF1: gst_video_decoder_have_frame (gstvideodecoder.c:3249) ==1526== by 0x16E88A45: gst_video_decoder_parse_available (gstvideodecoder.c:957) ==1526== by 0x16E88BF3: gst_video_decoder_chain_forward (gstvideodecoder.c:2115) ==1526== by 0x16E8A7AF: gst_video_decoder_chain (gstvideodecoder.c:2411) ==1526== by 0x16939CB0: gst_pad_chain_data_unchecked (gstpad.c:4038) ==1526== by 0x1693B966: gst_pad_push_data (gstpad.c:4282) ==1526== by 0x175A9E51: gst_type_find_element_loop (gsttypefindelement.c:1127) ==1526== by 0x1696A820: gst_task_func (gsttask.c:331) ==1526== by 0x5F9D03D: g_thread_pool_thread_proxy (gthreadpool.c:307) ==1526== by 0x5F9C6B4: g_thread_proxy (gthread.c:764) ==1526== by 0x37D7807554: start_thread (pthread_create.c:333) ==1526== by 0x37D7502B9C: clone (clone.S:109) ==1526== 639,120 (144 direct, 638,976 indirect) bytes in 1 blocks are definitely lost in loss record 9,586 of 9,586 ==1526== at 0x4A06C50: malloc (in /usr/lib64/valgrind/vgpreload_memcheck-amd64-linux.so) ==1526== by 0x5F7B689: g_malloc (gmem.c:97) ==1526== by 0x5F924D2: g_slice_alloc (gslice.c:1007) ==1526== by 0x168FFFEC: _sysmem_new (gstallocator.c:391) ==1526== by 0x168FFFEC: gst_memory_new_wrapped (gstallocator.c:623) ==1526== by 0x169097D9: gst_buffer_new_wrapped_full (gstbuffer.c:858) ==1526== by 0x169098FE: gst_buffer_new_wrapped (gstbuffer.c:883) ==1526== by 0x16BFFAC5: gst_adapter_get_buffer (gstadapter.c:960) ==1526== by 0x16BFFB8F: gst_adapter_take_buffer (gstadapter.c:1020) ==1526== by 0x16E8DA37: gst_video_decoder_add_to_frame (gstvideodecoder.c:3144) ==1526== by 0x1A750EDB: gst_rsvg_dec_parse (gstrsvgdec.c:329) ==1526== by 0x16E88A45: gst_video_decoder_parse_available (gstvideodecoder.c:957) ==1526== by 0x16E88BF3: gst_video_decoder_chain_forward (gstvideodecoder.c:2115) ==1526== by 0x16E8A7AF: gst_video_decoder_chain (gstvideodecoder.c:2411) ==1526== by 0x16939CB0: gst_pad_chain_data_unchecked (gstpad.c:4038) ==1526== by 0x1693B966: gst_pad_push_data (gstpad.c:4282) ==1526== by 0x175A9E51: gst_type_find_element_loop (gsttypefindelement.c:1127) ==1526== by 0x1696A820: gst_task_func (gsttask.c:331) ==1526== by 0x5F9D03D: g_thread_pool_thread_proxy (gthreadpool.c:307) ==1526== by 0x5F9C6B4: g_thread_proxy (gthread.c:764) ==1526== by 0x37D7807554: start_thread (pthread_create.c:333) ==1526== by 0x37D7502B9C: clone (clone.S:109)
Created attachment 308755 [details] [review] rsvg: Don't leak a GstVideoCodecState There's already the output_state variable with it, no need to call gst_video_decoder_get_output_state() and get a new ref.
Attachment 308755 [details] pushed as 3129396 - rsvg: Don't leak a GstVideoCodecState
Thanks