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 a1a5b2d85aee57e91994c36f39b180caabadaa39..b32b89508cee1be97e9453f2b79a9be2fd17b743 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;