aggregator: Take pad lock while releasing buffers when removing pads
authorSebastian Dröge <sebastian@centricular.com>
Thu, 19 Oct 2023 16:43:26 +0000 (19:43 +0300)
committerTim-Philipp Müller <tim@centricular.com>
Wed, 25 Oct 2023 13:58:06 +0000 (14:58 +0100)
Accessing the buffers in all other places requires the pad lock and not
taking it here can cause access to already freed buffers if there's
concurrent access from another thread.

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

subprojects/gstreamer/libs/gst/base/gstaggregator.c

index a1a5b2d..b32b895 100644 (file)
@@ -2032,7 +2032,9 @@ gst_aggregator_release_pad (GstElement * element, GstPad * pad)
 
   SRC_LOCK (self);
   gst_aggregator_pad_set_flushing (aggpad, GST_FLOW_FLUSHING, TRUE);
+  PAD_LOCK (aggpad);
   gst_buffer_replace (&aggpad->priv->peeked_buffer, NULL);
+  PAD_UNLOCK (aggpad);
   gst_element_remove_pad (element, pad);
 
   self->priv->has_peer_latency = FALSE;