qtmux: Fix deadlock in gst_qt_mux_prepare_moov_recovery

Regression from 5766731bd4

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/1288>
This commit is contained in:
Erlend Eriksen 2021-11-01 16:32:10 +01:00 committed by GStreamer Marge Bot
parent ffa363edf7
commit 0805ffdce9

View file

@ -2437,6 +2437,7 @@ gst_qt_mux_downstream_is_seekable (GstQTMux * qtmux)
return seekable; return seekable;
} }
/* Must be called with object lock */
static void static void
gst_qt_mux_prepare_moov_recovery (GstQTMux * qtmux) gst_qt_mux_prepare_moov_recovery (GstQTMux * qtmux)
{ {
@ -2457,21 +2458,17 @@ gst_qt_mux_prepare_moov_recovery (GstQTMux * qtmux)
gst_qt_mux_prepare_ftyp (qtmux, &ftyp, &prefix); gst_qt_mux_prepare_ftyp (qtmux, &ftyp, &prefix);
GST_OBJECT_LOCK (qtmux);
if (!atoms_recov_write_headers (qtmux->moov_recov_file, ftyp, prefix, if (!atoms_recov_write_headers (qtmux->moov_recov_file, ftyp, prefix,
qtmux->moov, qtmux->timescale, qtmux->moov, qtmux->timescale,
g_list_length (GST_ELEMENT (qtmux)->sinkpads))) { g_list_length (GST_ELEMENT (qtmux)->sinkpads))) {
GST_WARNING_OBJECT (qtmux, "Failed to write moov recovery file " "headers"); GST_WARNING_OBJECT (qtmux, "Failed to write moov recovery file " "headers");
GST_OBJECT_UNLOCK (qtmux);
goto fail; goto fail;
} }
GST_OBJECT_UNLOCK (qtmux);
atom_ftyp_free (ftyp); atom_ftyp_free (ftyp);
if (prefix) if (prefix)
gst_buffer_unref (prefix); gst_buffer_unref (prefix);
GST_OBJECT_LOCK (qtmux);
for (l = GST_ELEMENT_CAST (qtmux)->sinkpads; l; l = l->next) { for (l = GST_ELEMENT_CAST (qtmux)->sinkpads; l; l = l->next) {
GstQTMuxPad *qpad = (GstQTMuxPad *) l->data; GstQTMuxPad *qpad = (GstQTMuxPad *) l->data;
/* write info for each stream */ /* write info for each stream */
@ -2482,7 +2479,6 @@ gst_qt_mux_prepare_moov_recovery (GstQTMux * qtmux)
break; break;
} }
} }
GST_OBJECT_UNLOCK (qtmux);
return; return;