queue2: Hold the lock when modifying sinkresult

As it's done elsewhere. Avoids a potential race of the field being modified in
the meantime.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3111>
This commit is contained in:
Edward Hervey 2022-10-03 11:16:25 +02:00 committed by Tim-Philipp Müller
parent 67245861a2
commit 4ab71ca3f1

View file

@ -2675,12 +2675,14 @@ gst_queue2_handle_sink_event (GstPad * pad, GstObject * parent,
/* STREAM_START and SEGMENT reset the EOS status of a /* STREAM_START and SEGMENT reset the EOS status of a
* pad. Change the cached sinkpad flow result accordingly */ * pad. Change the cached sinkpad flow result accordingly */
GST_QUEUE2_MUTEX_LOCK (queue);
if (queue->sinkresult == GST_FLOW_EOS if (queue->sinkresult == GST_FLOW_EOS
&& (GST_EVENT_TYPE (event) == GST_EVENT_STREAM_START && (GST_EVENT_TYPE (event) == GST_EVENT_STREAM_START
|| GST_EVENT_TYPE (event) == GST_EVENT_SEGMENT)) || GST_EVENT_TYPE (event) == GST_EVENT_SEGMENT))
queue->sinkresult = GST_FLOW_OK; queue->sinkresult = GST_FLOW_OK;
else if (queue->sinkresult != GST_FLOW_OK)
goto out_flushing;
GST_QUEUE2_MUTEX_LOCK_CHECK (queue, queue->sinkresult, out_flushing);
if (queue->srcresult != GST_FLOW_OK) { if (queue->srcresult != GST_FLOW_OK) {
/* Errors in sticky event pushing are no problem and ignored here /* Errors in sticky event pushing are no problem and ignored here
* as they will cause more meaningful errors during data flow. * as they will cause more meaningful errors during data flow.