[Bug 760821] tracerrecord: Fix memory leaks and mishandlings
GStreamer (GNOME Bugzilla)
bugzilla at gnome.org
Thu Jan 21 03:53:16 PST 2016
https://bugzilla.gnome.org/show_bug.cgi?id=760821
--- Comment #15 from Stefan Sauer (gstreamer, gtkdoc dev) <ensonic at sonicpulse.de> ---
(In reply to Vineeth from comment #14)
> (In reply to Stefan Sauer (gstreamer, gtkdoc dev) from comment #12)
> > Vineeth, I push already a small patch that already frees the tracerrecord
> > objects and the string: commit a72368ebb388c22ff68a084a12b09327d857b34c
>
> okies
>
>
> (In reply to Stefan Sauer (gstreamer, gtkdoc dev) from comment #11)
> > Created attachment 319484 [details] [review] [review]
> > free sub structures
> >
> > I am a bit puzzled. I can 'fix' the leaks on the test (see patch), but if I
> > try to do the same on the gsttracerrecord (see code in the patch that is #if
> > 0'ed) then valgrind complains about illegal memory reads.
>
> I think the problem here is
> usage of
> self->spec = g_value_get_boxed (value);
>
> get_boxed is actually transfer none. So we should not be freeing the memory
> acquired using it. This is leading to the illegal memory access i guess.
>
> I am not sure if there is any other option to be used here.
> g_value_take_boxed does not accept const value
> g_value_dup_boxed creates duplicate memory. So freeing it wont free the
> actual memory..
>
Since this is construct-only we can document that we take-ownership. As you say
g_value_dup_boxed() won't help and g_value_take_boxed() is actually the
opposite (belongs to g_value_set_boxed(), g_value_set_static_boxed() ). We'd
need to able to say to g_object_new() that the structure should be passed via
g_value_take_boxed(), but I don't see any way. I'll did a bit further ...
>
>
> (In reply to Stefan Sauer (gstreamer, gtkdoc dev) from comment #13)
> > How should we deal with this one:
> > ==6293== 16 bytes in 1 blocks are definitely lost in loss record 584 of 1,490
> > ==6293== at 0x4C2AB80: malloc (in
> > /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
> > ==6293== by 0x5619610: g_malloc (in
> > /lib/x86_64-linux-gnu/libglib-2.0.so.0.4002.0)
> > ==6293== by 0x562F22D: g_slice_alloc (in
> > /lib/x86_64-linux-gnu/libglib-2.0.so.0.4002.0)
> > ==6293== by 0x5630005: g_slist_prepend (in
> > /lib/x86_64-linux-gnu/libglib-2.0.so.0.4002.0)
> > ==6293== by 0x50B8796: gst_debug_add_log_function (gstinfo.c:1188)
> > ==6293== by 0x50B93A7: _priv_gst_debug_init (gstinfo.c:324)
> > ==6293== by 0x50816B1: init_pre.part.2 (gst.c:484)
> > ==6293== by 0x50818B4: init_pre (gst.c:534)
> > ==6293== by 0x561EACF: g_option_context_parse (in
> > /lib/x86_64-linux-gnu/libglib-2.0.so.0.4002.0)
> > ==6293== by 0x5081E8E: gst_init_check (gst.c:354)
> > ==6293== by 0x5081ED6: gst_init (gst.c:400)
> > ==6293== by 0x4E40642: gst_check_init (gstcheck.c:127)
> > ==6293== by 0x40133D: main (gsttracerrecord.c:187)
> > ==6293==
> > ==6293== 32 (16 direct, 16 indirect) bytes in 1 blocks are definitely lost
> > in loss record 821 of 1,490
> > ==6293== at 0x4C2AB80: malloc (in
> > /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
> > ==6293== by 0x5619610: g_malloc (in
> > /lib/x86_64-linux-gnu/libglib-2.0.so.0.4002.0)
> > ==6293== by 0x562F22D: g_slice_alloc (in
> > /lib/x86_64-linux-gnu/libglib-2.0.so.0.4002.0)
> > ==6293== by 0x5630005: g_slist_prepend (in
> > /lib/x86_64-linux-gnu/libglib-2.0.so.0.4002.0)
> > ==6293== by 0x50B8796: gst_debug_add_log_function (gstinfo.c:1188)
> > ==6293== by 0x401CEE: setup (gsttracerrecord.c:52)
> > ==6293== by 0x4E4BA27: srunner_run_setup (check_run.c:288)
> > ==6293== by 0x4E4C537: tcase_run_checked_setup (check_run.c:317)
> > ==6293== by 0x4E4C537: tcase_run_tfun_fork (check_run.c:447)
> > ==6293== by 0x4E4C537: srunner_iterate_tcase_tfuns (check_run.c:222)
> > ==6293== by 0x4E4C537: srunner_run_tcase (check_run.c:362)
> > ==6293== by 0x4E4C537: srunner_iterate_suites (check_run.c:195)
> > ==6293== by 0x4E4C537: srunner_run (check_run.c:706)
> > ==6293== by 0x4E4177D: gst_check_run_suite (gstcheck.c:824)
> > ==6293== by 0x4013E4: main (gsttracerrecord.c:187)
> > ==6293==
> >
> > add a suppression? The gstinfo test suffers from the same problem though
> > (make gst/gstinfo.valgrind).
>
> Adding a suppression for the time being..
> There is a FIXME in gstinfo.c..
>
> /* FIXME: we leak the old list here - other threads might access it right
> now
> * in gst_debug_logv. Another solution is to lock the mutex in
> gst_debug_logv,
> * but that is waaay costly.
> * It'd probably be clever to use some kind of RCU here, but I don't know
> * anything about that.
> */
> Maybe fixing this will remove this leak. Did not go through it completely
> yet.
Yes, I know, but that seems to be not trivial :/
--
You are receiving this mail because:
You are the QA Contact for the bug.
You are the assignee for the bug.
More information about the gstreamer-bugs
mailing list