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