mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-11-27 12:11:13 +00:00
659d76a633
WebKit's websrc depends on the main-thread for download completion rendezvous. This exposed a number of deadlocks in adaptivedemux due to it holding the MANIFEST_LOCK during network requests, and also needing to hold it to change_state and resolve queries, which frequently occur during these download windows. Make demux->running MT-safe so that it can be accessed without using the MANIFEST_LOCK. In case a source is downloading and requires a MT-thread notification for completion of the fragment download, a state change during this download window will deadlock unless we cancel the downloads and ensure they are not restarted before we finish the state-change. Also make demux->priv->have_manifest MT-safe. A duration query happening in the window described above can deadlock for the same reason. Other src queries (like SEEKING) that happen in this window also could deadlock, but I haven't hit this scenario. Increase granularity of API_LOCK'ing in change_state as well. We need to cancel downloads before trying to take this lock, since sink events (EOS) will hold it before starting a fragment download. |
||
---|---|---|
.. | ||
adaptivedemux | ||
audio | ||
basecamerabinsrc | ||
codecparsers | ||
insertbin | ||
interfaces | ||
isoff | ||
mpegts | ||
opencv | ||
player | ||
sctp | ||
uridownloader | ||
vulkan | ||
wayland | ||
webrtc | ||
gettext.h | ||
glib-compat-private.h | ||
gst-i18n-plugin.h | ||
Makefile.am | ||
meson.build |