playbin3: Fix missing pad unref
authorSanchayan Maity <sanchayan@asymptotic.io>
Thu, 13 Oct 2022 16:45:58 +0000 (22:15 +0530)
committerSanchayan Maity <sanchayan@asymptotic.io>
Fri, 28 Oct 2022 04:45:42 +0000 (10:15 +0530)
commit673d13f1760c93924c71fce8b6b14debccf7e533
treef4fb4a356d78fd8f542f422c0909b23dc220c41d
parent1c835695a3d411f1789cf5c73174fd37b151e195
playbin3: Fix missing pad unref

GST_TRACERS="leaks" GST_DEBUG="GST_TRACER:7,leaks:6" gst-play-1.0 --use-playbin3 test.mkv

When running a pipeline like above, leaks are observed.

0:00:56.882419132 240637 0x5562c528ccc0 TRACE             GST_TRACER :0:: object-alive, type-name=(string)GstConcatPad, address=(gpointer)0x7efd7c0d20a0, description=(string)<'':sink_0>, ref-count=(uint)1, trace=(string);
0:00:56.882429131 240637 0x5562c528ccc0 TRACE             GST_TRACER :0:: object-alive, type-name=(string)GstConcatPad, address=(gpointer)0x7efd7c0d2be0, description=(string)<'':sink_0>, ref-count=(uint)1, trace=(string);
0:00:56.882437056 240637 0x5562c528ccc0 TRACE             GST_TRACER :0:: object-alive, type-name=(string)GstConcatPad, address=(gpointer)0x7efd7c0d3720, description=(string)<'':sink_0>, ref-count=(uint)1, trace=(string);

gst_element_release_request_pad does not unref the pad. It needs to
be followed by gst_object_unref. Doing that fixes the above leaks.

Use g_ptr_array_new_with_free_func with gst_object_unref as the free
function to unref the pad after release.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3177>
subprojects/gst-plugins-base/gst/playback/gstplaybin3.c