qtmux: Release object lock before posting an error message
authorSebastian Dröge <sebastian@centricular.com>
Fri, 4 Nov 2022 08:49:31 +0000 (10:49 +0200)
committerGStreamer Marge Bot <gitlab-merge-bot@gstreamer-foundation.org>
Fri, 4 Nov 2022 19:02:22 +0000 (19:02 +0000)
GST_ELEMENT_ERROR() also takes the object lock and this would then
deadlock.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3321>

subprojects/gst-plugins-good/gst/isomp4/gstqtmux.c

index 3dd7649..9a5c8fb 100644 (file)
@@ -4046,11 +4046,10 @@ gst_qt_mux_stop_file (GstQTMux * qtmux)
 
         if (qpad->trak->edts
             && g_slist_length (qpad->trak->edts->elst.entries) > 1) {
+          GST_OBJECT_UNLOCK (qtmux);
           GST_ELEMENT_ERROR (qtmux, STREAM, MUX, (NULL),
               ("Can't support gaps in prefill mode"));
 
-          GST_OBJECT_UNLOCK (qtmux);
-
           return GST_FLOW_ERROR;
         }
       }
@@ -5502,6 +5501,7 @@ find_best_pad (GstQTMux * qtmux)
        * to be written at */
       block_idx = current_block_idx = prefill_get_block_index (qtmux, qtpad);
       if (!qtpad->samples || block_idx >= qtpad->samples->len) {
+        GST_OBJECT_UNLOCK (qtmux);
         GST_ELEMENT_ERROR (qtmux, RESOURCE, SETTINGS,
             ("Failed to create samples in prefill mode"), (NULL));
         return NULL;