Leaks detected when only gst_init/ges_init and gst_deinit is called (with registry-built-up every time)
Martin Maurer
meinemailingliste2 at online.de
Tue May 9 17:30:57 UTC 2017
Hi,
for a test I am only calling gst_init/ges_init and gst_deinit of
gstreamer (version 1.12.0 on Windows, self-compiled). It takes a while
because registry is built up.
(I work with enabled registry but it is deleted afterwards, because it
is only stored on a temporary drive in RAM.
New way of disabling registry cannot yet used, because of use of
gstreamer version < 1.12.0. Latest version is only used for my testing.)
When activating leak tracer I see the following output/leaked objects:
0:00:34.134545898 4584 00000000021FB030 TRACE GST_TRACER
:0:: object-alive, type-name=(string)GstBus,
address=(gpointer)000000001781E300, description=(string)<bus4>,
ref-count=(uint)2, trace=(string);
0:00:34.134604607 4584 00000000021FB030 TRACE GST_TRACER
:0:: object-alive, type-name=(string)GstBus,
address=(gpointer)000000001781E220, description=(string)<bus2>,
ref-count=(uint)1, trace=(string);
0:00:34.134659305 4584 00000000021FB030 TRACE GST_TRACER
:0:: object-alive, type-name=(string)GstBus,
address=(gpointer)000000001781E140, description=(string)<bus1>,
ref-count=(uint)3, trace=(string);
0:00:34.134712908 4584 00000000021FB030 TRACE GST_TRACER
:0:: object-alive, type-name=(string)GstBus,
address=(gpointer)000000001781E4C0, description=(string)<bus6>,
ref-count=(uint)1, trace=(string);
0:00:34.134768335 4584 00000000021FB030 TRACE GST_TRACER
:0:: object-alive, type-name=(string)GstBus,
address=(gpointer)000000001781E060, description=(string)<bus0>,
ref-count=(uint)2, trace=(string);
0:00:34.134856946 4584 00000000021FB030 TRACE GST_TRACER
:0:: object-alive, type-name=(string)GstBus,
address=(gpointer)000000001781E3E0, description=(string)<bus5>,
ref-count=(uint)2, trace=(string);
0:00:34.134910550 4584 00000000021FB030 TRACE GST_TRACER
:0:: object-alive, type-name=(string)GstPipeline,
address=(gpointer)0000000009F21650, description=(string)<Discoverer>,
ref-count=(uint)1, trace=(string);
0:00:34.134964518 4584 00000000021FB030 TRACE GST_TRACER
:0:: object-alive, type-name=(string)GstPipeline,
address=(gpointer)0000000009F21850, description=(string)<Discoverer>,
ref-count=(uint)1, trace=(string);
0:00:34.135017757 4584 00000000021FB030 TRACE GST_TRACER
:0:: object-alive, type-name=(string)GstQuery,
address=(gpointer)0000000017644E10, description=(string)seeking query:
0000000017644E10, GstQuerySeeking, format=(GstFormat)GST_FORMAT_TIME,
seekable=(boolean)false, segment-start=(gint64)-1,
segment-end=(gint64)-1;, ref-count=(uint)1, trace=(string);
0:00:34.135073549 4584 00000000021FB030 TRACE GST_TRACER
:0:: object-alive, type-name=(string)GstQuery,
address=(gpointer)0000000017644E60, description=(string)seeking query:
0000000017644E60, GstQuerySeeking, format=(GstFormat)GST_FORMAT_TIME,
seekable=(boolean)false, segment-start=(gint64)-1,
segment-end=(gint64)-1;, ref-count=(uint)1, trace=(string);
0:00:34.135128611 4584 00000000021FB030 TRACE GST_TRACER
:0:: object-alive, type-name=(string)GstURIDecodeBin,
address=(gpointer)0000000009B49E90,
description=(string)<discoverer-uri>, ref-count=(uint)1, trace=(string);
0:00:34.135183309 4584 00000000021FB030 TRACE GST_TRACER
:0:: object-alive, type-name=(string)GstURIDecodeBin,
address=(gpointer)0000000009B49C20,
description=(string)<discoverer-uri>, ref-count=(uint)1, trace=(string);
I narrowed it down that at least some objects are created by
“Discoverer”
(gst-plugins-base-1.0-1.12.0\gst-libs\gst\pbutils\gstdiscoverer.c):
WARNING: no real random source present!
MMMM I am in gst_discoverer_class_init
MMMM I am in gst_discoverer_init 000000001781D130
MMMM Pipeline Discoverer -> 0000000009F21650
MMMM uridecodebin discoverer-uri -> 0000000009B49E90
MMMM Discoverer pipeline bus -> 000000001781E140
MMMM I am in gst_discoverer_set_property
MMMM I am in gst_discoverer_set_timeout
MMMM I am in gst_discoverer_init 000000001781D220
MMMM Pipeline Discoverer -> 0000000009F21850
MMMM uridecodebin discoverer-uri -> 0000000009B49C20
MMMM Discoverer pipeline bus -> 000000001781E3E0
MMMM I am in gst_discoverer_set_property
MMMM I am in gst_discoverer_set_timeout
MMMM I am in gst_discoverer_start
MMMM I am in start_discovering
** (Test.exe:4584): WARNING **: Leaks detected
When using GST_REGISTRY_DISABLE=yes, the leaks go away. So they seem to
come from enumeration to build-up the registry.
The 2 leaked pipelines, some of the GstBus and the GstURIDecodeBin seem
to be allocated in “Discoverer”.
Addresses are equal. Perhaps also the other objects are from Discoverer…
I assume that leaks also go away when registry file is used and file is
existing.
What is the exact sequence during enumeration and registry build-up?
What is done with a plug-in?
Why is two times gst_discoverer_init called? Where is the cleanup
procedure for this objects located?
I already had a look into plugin writers guide, but not found the needed
info (or I have overseen it).
Is it only a local problem or can someone also reproduce this?
Many thanks!
Best regards,
Martin
More information about the gstreamer-devel
mailing list