[Bug 766645] matroskademux: don't hold object lock whilst pushing out headers, might lead to query deadlock

GStreamer (GNOME Bugzilla) bugzilla at gnome.org
Thu May 19 21:07:15 UTC 2016


https://bugzilla.gnome.org/show_bug.cgi?id=766645

Tim-Philipp Müller <t.i.m at zen.co.uk> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|NEW                         |RESOLVED
         Resolution|---                         |FIXED
   Target Milestone|git master                  |1.8.2
            Summary|matroskademux: Remove       |matroskademux: don't hold
                   |unnecessary lock condition  |object lock whilst pushing
                   |                            |out headers, might lead to
                   |                            |query deadlock

--- Comment #4 from Tim-Philipp Müller <t.i.m at zen.co.uk> ---
Thanks for the patch.

I don't see any reason why the demuxer needs to take the lock here either, the
variables should be sufficiently protected by the stream lock.

And in general, elements should never hold the OBJECT_LOCK when pushing out
buffers or events.

In addition to that, if the GST_ELEMENT_ERROR() code path was ever hit, that
would deadlock too.

commit eb09829a1c1987373ae433daca6420ea6c0fb908
Author: Seungha Yang <sh.yang at lge.com>
Date:   Thu May 19 15:36:57 2016 +0900

    matroskademux: don't hold object lock whilst pushing out headers

    matroskademux would take the GST_OBJECT_LOCK in
    - gst_matroska_demux_push_codec_data_all()
    - gst_matroska_demux_query()

    Some parse element such as FLAC checks upstream seekability, and
    there is some use cases that matroska-demux is linked to a parse element
    (e.g.,FLAC format) without intermediate elements (e.g., queue).
    In this case, matroska-demux never returns from _push_codec_data_all()
    because the parser can return only after it receives the response to
    the upstream query, but that's not going to happen because it's
    deadlocked.

    Elements must not hold the object lock whilst pushing out events
    or data.

    https://bugzilla.gnome.org/show_bug.cgi?id=766645

-- 
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