summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSebastian Dröge <sebastian@centricular.com>2024-03-27 17:05:09 +0200
committerGStreamer Marge Bot <gitlab-merge-bot@gstreamer-foundation.org>2024-04-15 19:07:08 +0000
commit3eedd8221c31084c46419c14fc05c3373c7c5072 (patch)
tree556da55c46720fcca2821c6f10cf78303870951a
parent17b0b949a469df2c60a90554d34589741268263f (diff)
basesrc: Clear submitted buffer lists consistently with buffers
And handle the case of a NULL buffer being returned cleanly, which is valid as long as a buffer list is returned instead. Previously this would cause an assertion because of calling gst_buffer_unref() with NULL. Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6462>
-rw-r--r--subprojects/gstreamer/libs/gst/base/gstbasesrc.c6
1 files changed, 4 insertions, 2 deletions
diff --git a/subprojects/gstreamer/libs/gst/base/gstbasesrc.c b/subprojects/gstreamer/libs/gst/base/gstbasesrc.c
index e47d14581e..646c94962d 100644
--- a/subprojects/gstreamer/libs/gst/base/gstbasesrc.c
+++ b/subprojects/gstreamer/libs/gst/base/gstbasesrc.c
@@ -2599,7 +2599,8 @@ again:
wait_ret = gst_base_src_wait_playing_unlocked (src);
if (wait_ret != GST_FLOW_OK) {
if (ret == GST_FLOW_OK && own_res_buf)
- gst_buffer_unref (res_buf);
+ gst_clear_buffer (&res_buf);
+ gst_clear_buffer_list (&src->priv->pending_bufferlist);
ret = wait_ret;
goto stopped;
}
@@ -2612,7 +2613,8 @@ again:
if (G_UNLIKELY (g_atomic_int_get (&src->priv->has_pending_eos))) {
if (ret == GST_FLOW_OK) {
if (own_res_buf)
- gst_buffer_unref (res_buf);
+ gst_clear_buffer (&res_buf);
+ gst_clear_buffer_list (&src->priv->pending_bufferlist);
}
src->priv->forced_eos = TRUE;
goto eos;