Script 'mail_helper' called by obssrc
Hello community,
here is the log from the commit of package gstreamer-editing-services for
openSUSE:Factory checked in at 2026-05-13 17:20:13
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/gstreamer-editing-services (Old)
and /work/SRC/openSUSE:Factory/.gstreamer-editing-services.new.1966 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "gstreamer-editing-services"
Wed May 13 17:20:13 2026 rev:78 rq:1352709 version:1.28.3
Changes:
--------
---
/work/SRC/openSUSE:Factory/gstreamer-editing-services/gstreamer-editing-services.changes
2026-04-15 16:06:10.570959376 +0200
+++
/work/SRC/openSUSE:Factory/.gstreamer-editing-services.new.1966/gstreamer-editing-services.changes
2026-05-13 17:21:47.117380022 +0200
@@ -1,0 +2,8 @@
+Tue May 12 07:25:34 UTC 2026 - Bjørn Lie <[email protected]>
+
+- Update to version 1.28.3:
+ + Plug memory leaks reported running valgrind on our testsuite
+ + Fix use-after-free in GESUriSource decodebin callbacks
+ + Fix use-after-free in structured-interface and asset cache
+
+-------------------------------------------------------------------
Old:
----
gst-editing-services-1.28.2.obscpio
New:
----
gst-editing-services-1.28.3.obscpio
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ gstreamer-editing-services.spec ++++++
--- /var/tmp/diff_new_pack.6Y2PBP/_old 2026-05-13 17:21:47.861410882 +0200
+++ /var/tmp/diff_new_pack.6Y2PBP/_new 2026-05-13 17:21:47.865411048 +0200
@@ -20,7 +20,7 @@
%define _name gst-editing-services
Name: gstreamer-editing-services
-Version: 1.28.2
+Version: 1.28.3
Release: 0
Summary: GStreamer Editing Services
License: LGPL-2.0-or-later AND LGPL-2.1-or-later
++++++ _service ++++++
--- /var/tmp/diff_new_pack.6Y2PBP/_old 2026-05-13 17:21:47.909412873 +0200
+++ /var/tmp/diff_new_pack.6Y2PBP/_new 2026-05-13 17:21:47.913413039 +0200
@@ -5,7 +5,7 @@
<param
name="url">https://gitlab.freedesktop.org/gstreamer/gstreamer.git</param>
<param name="subdir">subprojects/gst-editing-services</param>
<param name="filename">gst-editing-services</param>
- <param name="revision">1.28.2</param>
+ <param name="revision">1.28.3</param>
<param name="versionformat">@PARENT_TAG@+@TAG_OFFSET@</param>
<param name="versionrewrite-pattern">v?(.*)\+0</param>
<param name="versionrewrite-replacement">\1</param>
++++++ gst-editing-services-1.28.2.obscpio ->
gst-editing-services-1.28.3.obscpio ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/gst-editing-services-1.28.2/ges/ges-asset.c
new/gst-editing-services-1.28.3/ges/ges-asset.c
--- old/gst-editing-services-1.28.2/ges/ges-asset.c 2026-04-07
21:02:23.000000000 +0200
+++ new/gst-editing-services-1.28.3/ges/ges-asset.c 2026-05-11
19:28:12.000000000 +0200
@@ -789,7 +789,8 @@
_deinit_formatter_assets ();
LOCK_CACHE;
- g_hash_table_destroy (type_entries_table);
+ if (type_entries_table)
+ g_hash_table_destroy (type_entries_table);
type_entries_table = NULL;
UNLOCK_CACHE;
}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/gst-editing-services-1.28.2/ges/ges-pipeline.c
new/gst-editing-services-1.28.3/ges/ges-pipeline.c
--- old/gst-editing-services-1.28.2/ges/ges-pipeline.c 2026-04-07
21:02:23.000000000 +0200
+++ new/gst-editing-services-1.28.3/ges/ges-pipeline.c 2026-05-11
19:28:12.000000000 +0200
@@ -90,6 +90,8 @@
GstEncodingProfile *profile;
GThread *valid_thread;
+
+ GstTaskPool *shared_pool;
};
enum
@@ -305,10 +307,17 @@
g_get_num_processors ());
gst_task_pool_prepare (pool, NULL);
+ self->priv->shared_pool = gst_object_ref (pool);
+
pool_context = gst_context_new (GST_TASK_POOL_CONTEXT_TYPE, FALSE);
gst_context_set_task_pool (pool_context, pool);
gst_object_unref (pool);
+ /* Store the context on the pipeline itself so that subsequent
+ * NEED_CONTEXT messages from other children will find it via
+ * gst_element_get_context() instead of creating a new pool */
+ gst_element_set_context (GST_ELEMENT_CAST (self), pool_context);
+
have_msg =
gst_message_new_have_context (GST_OBJECT_CAST (self),
gst_context_ref (pool_context));
@@ -331,6 +340,12 @@
{
GESPipeline *self = GES_PIPELINE (object);
+ if (self->priv->shared_pool) {
+ gst_task_pool_cleanup (self->priv->shared_pool);
+ gst_object_unref (self->priv->shared_pool);
+ self->priv->shared_pool = NULL;
+ }
+
if (self->priv->playsink) {
if (self->priv->mode & (GES_PIPELINE_MODE_PREVIEW))
gst_bin_remove (GST_BIN (object), self->priv->playsink);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/gst-editing-services-1.28.2/ges/ges-project.c
new/gst-editing-services-1.28.3/ges/ges-project.c
--- old/gst-editing-services-1.28.2/ges/ges-project.c 2026-04-07
21:02:23.000000000 +0200
+++ new/gst-editing-services-1.28.3/ges/ges-project.c 2026-05-11
19:28:12.000000000 +0200
@@ -746,9 +746,19 @@
}
/* Always send the MISSING_URI signal if requesting new ID is possible
- * so that subclasses of GESProject are aware of the missing-uri */
- g_signal_emit (project, _signals[MISSING_URI_SIGNAL], 0, error, asset,
- &new_id);
+ * so that subclasses of GESProject are aware of the missing-uri.
+ * Save the proposed id beforehand since g_signal_emit overwrites the
+ * return value pointer without freeing the old value. */
+ {
+ gchar *proposed_id = new_id;
+ new_id = NULL;
+ g_signal_emit (project, _signals[MISSING_URI_SIGNAL], 0, error, asset,
+ &new_id);
+ if (!new_id)
+ new_id = proposed_id;
+ else
+ g_free (proposed_id);
+ }
if (new_id) {
GST_DEBUG_OBJECT (project, "new id found: %s", new_id);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/gst-editing-services-1.28.2/ges/ges-structured-interface.c
new/gst-editing-services-1.28.3/ges/ges-structured-interface.c
--- old/gst-editing-services-1.28.2/ges/ges-structured-interface.c
2026-04-07 21:02:23.000000000 +0200
+++ new/gst-editing-services-1.28.3/ges/ges-structured-interface.c
2026-05-11 19:28:12.000000000 +0200
@@ -30,6 +30,41 @@
#define LAST_CONTAINER_QDATA
g_quark_from_string("ges-structured-last-container")
#define LAST_CHILD_QDATA g_quark_from_string("ges-structured-last-child")
+static void
+_last_container_weak_ref_free (gpointer data)
+{
+ GWeakRef *ref = data;
+
+ g_weak_ref_clear (ref);
+ g_free (ref);
+}
+
+static GESContainer *
+_get_last_container (GObject * timeline)
+{
+ GWeakRef *ref = g_object_get_qdata (timeline, LAST_CONTAINER_QDATA);
+
+ if (!ref)
+ return NULL;
+
+ return g_weak_ref_get (ref);
+}
+
+static void
+_set_last_container (GObject * timeline, GESClip * clip)
+{
+ GWeakRef *ref = g_object_get_qdata (timeline, LAST_CONTAINER_QDATA);
+
+ if (!ref) {
+ ref = g_new0 (GWeakRef, 1);
+ g_weak_ref_init (ref, clip);
+ g_object_set_qdata_full (timeline, LAST_CONTAINER_QDATA, ref,
+ _last_container_weak_ref_free);
+ } else {
+ g_weak_ref_set (ref, clip);
+ }
+}
+
#define REPORT_UNLESS(condition, errpoint, ...)
\
G_STMT_START {
\
if (!(condition)) {
\
@@ -228,9 +263,7 @@
}
if (!element) {
- element = g_object_get_qdata (G_OBJECT (timeline), LAST_CONTAINER_QDATA);
- if (element)
- gst_object_ref (element);
+ element = GES_TIMELINE_ELEMENT (_get_last_container (G_OBJECT (timeline)));
}
REPORT_UNLESS (GES_IS_TIMELINE_ELEMENT (element), err,
@@ -687,11 +720,13 @@
if (layer_priority == -1) {
GESContainer *container;
- container = g_object_get_qdata (G_OBJECT (timeline), LAST_CONTAINER_QDATA);
- if (!container || !GES_IS_CLIP (container))
+ container = _get_last_container (G_OBJECT (timeline));
+ if (!container || !GES_IS_CLIP (container)) {
layer = _ges_get_layer_by_priority (timeline, 0);
- else
+ } else {
layer = ges_clip_get_layer (GES_CLIP (container));
+ }
+ g_clear_object (&container);
if (!layer)
layer = _ges_get_layer_by_priority (timeline, 0);
@@ -774,7 +809,7 @@
}
if (res) {
- g_object_set_qdata (G_OBJECT (timeline), LAST_CONTAINER_QDATA, clip);
+ _set_last_container (G_OBJECT (timeline), GES_CLIP (clip));
g_object_set_qdata (G_OBJECT (timeline), LAST_CHILD_QDATA, NULL);
}
@@ -856,7 +891,7 @@
GstStructure * structure, GError ** error)
{
GESAsset *asset = NULL;
- GESContainer *container;
+ GESContainer *container = NULL;
GESTimelineElement *child = NULL;
const gchar *container_name, *child_name, *child_type, *id;
@@ -873,7 +908,7 @@
container_name = gst_structure_get_string (structure, "container-name");
if (container_name == NULL) {
- container = g_object_get_qdata (G_OBJECT (timeline), LAST_CONTAINER_QDATA);
+ container = _get_last_container (G_OBJECT (timeline));
} else {
container =
GES_CONTAINER (ges_timeline_get_element (timeline, container_name));
@@ -994,6 +1029,7 @@
beach:
gst_clear_object (&asset);
+ g_clear_object (&container);
return res;
}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/gst-editing-services-1.28.2/ges/ges-timeline.c
new/gst-editing-services-1.28.3/ges/ges-timeline.c
--- old/gst-editing-services-1.28.2/ges/ges-timeline.c 2026-04-07
21:02:23.000000000 +0200
+++ new/gst-editing-services-1.28.3/ges/ges-timeline.c 2026-05-11
19:28:12.000000000 +0200
@@ -574,6 +574,7 @@
g_list_free_full (stream_ids, g_free);
g_list_free (to_remove);
+ gst_event_unref (event);
return TRUE;
}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/gst-editing-services-1.28.2/ges/ges-track.c
new/gst-editing-services-1.28.3/ges/ges-track.c
--- old/gst-editing-services-1.28.2/ges/ges-track.c 2026-04-07
21:02:23.000000000 +0200
+++ new/gst-editing-services-1.28.3/ges/ges-track.c 2026-05-11
19:28:12.000000000 +0200
@@ -505,6 +505,7 @@
ges_track_select_subtimeline_streams (track, collection,
GST_ELEMENT (GST_MESSAGE_SRC (message)));
+ gst_object_unref (collection);
GST_INFO_OBJECT (bin,
"Handled ges-timeline-collection message, dropping");
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/gst-editing-services-1.28.2/ges/ges-uri-source.c
new/gst-editing-services-1.28.3/ges/ges-uri-source.c
--- old/gst-editing-services-1.28.2/ges/ges-uri-source.c 2026-04-07
21:02:23.000000000 +0200
+++ new/gst-editing-services-1.28.3/ges/ges-uri-source.c 2026-05-11
19:28:12.000000000 +0200
@@ -57,7 +57,7 @@
static gint
autoplug_select_cb (GstElement * bin, GstPad * pad, GstCaps * caps,
- GstElementFactory * factory, GESUriSource * self)
+ GstElementFactory * factory, GESTrackElement * element)
{
GstElement *nlesrc;
GstCaps *downstream_caps;
@@ -68,19 +68,19 @@
const gchar *wanted_id =
gst_discoverer_stream_info_get_stream_id
(ges_uri_source_asset_get_stream_info (GES_URI_SOURCE_ASSET
- (ges_extractable_get_asset (GES_EXTRACTABLE (self->element)))));
+ (ges_extractable_get_asset (GES_EXTRACTABLE (element)))));
gboolean wanted = !g_strcmp0 (stream_id, wanted_id);
- if (!ges_source_get_rendering_smartly (GES_SOURCE (self->element))) {
+ if (!ges_source_get_rendering_smartly (GES_SOURCE (element))) {
if (!are_raw_caps (caps))
goto done;
if (!wanted) {
- GST_INFO_OBJECT (self->element, "Not matching stream id: %s -> SKIPPING",
+ GST_INFO_OBJECT (element, "Not matching stream id: %s -> SKIPPING",
stream_id);
res = GST_AUTOPLUG_SELECT_SKIP;
} else {
- GST_INFO_OBJECT (self->element, "Using stream %s", stream_id);
+ GST_INFO_OBJECT (element, "Using stream %s", stream_id);
}
goto done;
}
@@ -102,16 +102,16 @@
goto done;
}
- nlesrc = ges_track_element_get_nleobject (self->element);
+ nlesrc = ges_track_element_get_nleobject (element);
downstream_caps = gst_pad_peer_query_caps (nlesrc->srcpads->data, NULL);
if (downstream_caps && gst_caps_can_intersect (downstream_caps, caps)) {
if (wanted) {
res = GST_AUTOPLUG_SELECT_EXPOSE;
- GST_INFO_OBJECT (self->element,
+ GST_INFO_OBJECT (element,
"Exposing %" GST_PTR_FORMAT " with stream id: %s", caps, stream_id);
} else {
res = GST_AUTOPLUG_SELECT_SKIP;
- GST_DEBUG_OBJECT (self->element, "Totally skipping %s", stream_id);
+ GST_DEBUG_OBJECT (element, "Totally skipping %s", stream_id);
}
}
gst_clear_caps (&downstream_caps);
@@ -125,7 +125,7 @@
static void
source_setup_cb (GstElement * decodebin, GstElement * source,
- GESUriSource * self)
+ GESTrackElement * element)
{
GstElementFactory *factory = gst_element_get_factory (source);
@@ -133,7 +133,7 @@
return;
}
- GESTrack *track = ges_track_element_get_track (self->element);
+ GESTrack *track = ges_track_element_get_track (element);
GESTimeline *subtimeline;
g_object_get (source, "timeline", &subtimeline, NULL);
@@ -160,13 +160,17 @@
if (track)
caps = ges_track_get_caps (track);
- g_signal_connect (decodebin, "source-setup",
- G_CALLBACK (source_setup_cb), self);
+ /* Use g_signal_connect_object so the closures are automatically
+ * invalidated when `element` (which owns self via its private data)
+ * is destroyed, avoiding use-after-free on uridecodebin worker
+ * threads after the owning track element has been disposed. */
+ g_signal_connect_object (decodebin, "source-setup",
+ G_CALLBACK (source_setup_cb), self->element, 0);
g_object_set (decodebin, "caps", caps,
"expose-all-streams", FALSE, "uri", self->uri, NULL);
- g_signal_connect (decodebin, "autoplug-select",
- G_CALLBACK (autoplug_select_cb), self);
+ g_signal_connect_object (decodebin, "autoplug-select",
+ G_CALLBACK (autoplug_select_cb), self->element, 0);
return decodebin;
}
@@ -181,7 +185,7 @@
if (!self->decodebin)
return;
- track = ges_track_element_get_track (GES_TRACK_ELEMENT (element));
+ track = ges_track_element_get_track (element);
if (!track)
return;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/gst-editing-services-1.28.2/ges/ges-validate.c
new/gst-editing-services-1.28.3/ges/ges-validate.c
--- old/gst-editing-services-1.28.2/ges/ges-validate.c 2026-04-07
21:02:23.000000000 +0200
+++ new/gst-editing-services-1.28.3/ges/ges-validate.c 2026-05-11
19:28:12.000000000 +0200
@@ -1091,9 +1091,12 @@
gst_object_unref (scenario);
gst_object_unref (timeline);
- return type->overriden_type->prepare (action);
+ res = type->overriden_type->prepare (action);
+ gst_mini_object_unref (GST_MINI_OBJECT (type));
+ return res;
done:
+ gst_mini_object_unref (GST_MINI_OBJECT (type));
gst_object_unref (scenario);
gst_object_unref (timeline);
return res;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/gst-editing-services-1.28.2/ges/ges-xml-formatter.c
new/gst-editing-services-1.28.3/ges/ges-xml-formatter.c
--- old/gst-editing-services-1.28.2/ges/ges-xml-formatter.c 2026-04-07
21:02:23.000000000 +0200
+++ new/gst-editing-services-1.28.3/ges/ges-xml-formatter.c 2026-05-11
19:28:12.000000000 +0200
@@ -1325,14 +1325,16 @@
GESXmlFormatterPrivate *priv = self->priv;
assets = ges_project_list_assets (project, GES_TYPE_EXTRACTABLE);
- for (tmp = g_list_sort (assets, (GCompareFunc) sort_assets); tmp;
- tmp = tmp->next) {
+ assets = g_list_sort (assets, (GCompareFunc) sort_assets);
+ for (tmp = assets; tmp; tmp = tmp->next) {
asset = GES_ASSET (tmp->data);
id = ges_asset_get_id (asset);
if (GES_IS_PROJECT (asset)) {
- if (!_save_subproject (self, str, project, asset, error, depth))
+ if (!_save_subproject (self, str, project, asset, error, depth)) {
+ g_list_free_full (assets, gst_object_unref);
return FALSE;
+ }
continue;
}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/gst-editing-services-1.28.2/gst-editing-services.doap
new/gst-editing-services-1.28.3/gst-editing-services.doap
--- old/gst-editing-services-1.28.2/gst-editing-services.doap 2026-04-07
21:02:23.000000000 +0200
+++ new/gst-editing-services-1.28.3/gst-editing-services.doap 2026-05-11
19:28:12.000000000 +0200
@@ -32,6 +32,16 @@
<release>
<Version>
+ <revision>1.28.3</revision>
+ <branch>1.28</branch>
+ <name></name>
+ <created>2026-05-11</created>
+ <file-release
rdf:resource="https://gstreamer.freedesktop.org/src/gst-editing-services/gst-editing-services-1.28.3.tar.xz"
/>
+ </Version>
+ </release>
+
+ <release>
+ <Version>
<revision>1.28.2</revision>
<branch>1.28</branch>
<name></name>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/gst-editing-services-1.28.2/meson.build
new/gst-editing-services-1.28.3/meson.build
--- old/gst-editing-services-1.28.2/meson.build 2026-04-07 21:02:23.000000000
+0200
+++ new/gst-editing-services-1.28.3/meson.build 2026-05-11 19:28:12.000000000
+0200
@@ -1,8 +1,9 @@
project('gst-editing-services', 'c',
- version : '1.28.2',
+ version : '1.28.3',
meson_version : '>= 1.4',
default_options : [ 'warning_level=1',
- 'buildtype=debugoptimized' ])
+ 'buildtype=debugoptimized',
+ 'c_std=gnu11,c11' ])
gst_version = meson.project_version()
version_arr = gst_version.split('.')
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/gst-editing-services-1.28.2/plugins/ges/gesbasebin.c
new/gst-editing-services-1.28.3/plugins/ges/gesbasebin.c
--- old/gst-editing-services-1.28.2/plugins/ges/gesbasebin.c 2026-04-07
21:02:23.000000000 +0200
+++ new/gst-editing-services-1.28.3/plugins/ges/gesbasebin.c 2026-05-11
19:28:12.000000000 +0200
@@ -80,6 +80,8 @@
priv->track_removed_sigid = 0;
GST_OBJECT_UNLOCK (self);
+ gst_element_set_locked_state (GST_ELEMENT (priv->timeline), FALSE);
+ gst_element_set_state (GST_ELEMENT (priv->timeline), GST_STATE_NULL);
gst_bin_remove (GST_BIN (self), GST_ELEMENT (priv->timeline));
GST_OBJECT_LOCK (self);
@@ -133,6 +135,25 @@
}
}
+static GstStateChangeReturn
+ges_base_bin_change_state (GstElement * element, GstStateChange transition)
+{
+ GESBaseBin *self = GES_BASE_BIN (element);
+ GESBaseBinPrivate *priv = ges_base_bin_get_instance_private (self);
+
+ switch (transition) {
+ case GST_STATE_CHANGE_PAUSED_TO_READY:
+ if (priv->timeline)
+ gst_element_set_locked_state (GST_ELEMENT (priv->timeline), FALSE);
+ break;
+ default:
+ break;
+ }
+
+ return GST_ELEMENT_CLASS (ges_base_bin_parent_class)->change_state (element,
+ transition);
+}
+
static void
ges_base_bin_class_init (GESBaseBinClass * self_class)
{
@@ -149,6 +170,8 @@
gclass->dispose = ges_base_bin_dispose;
gclass->finalize = ges_base_bin_finalize;
+ gstelement_klass->change_state = ges_base_bin_change_state;
+
/**
* GESBaseBin:timeline:
*
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/gst-editing-services-1.28.2/plugins/ges/gesdemux.c
new/gst-editing-services-1.28.3/plugins/ges/gesdemux.c
--- old/gst-editing-services-1.28.2/plugins/ges/gesdemux.c 2026-04-07
21:02:23.000000000 +0200
+++ new/gst-editing-services-1.28.3/plugins/ges/gesdemux.c 2026-05-11
19:28:12.000000000 +0200
@@ -163,6 +163,7 @@
}
}
g_strfreev (extensions_a);
+ gst_caps_unref (caps);
}
done:
g_list_free (formatters);
@@ -411,7 +412,7 @@
G_GNUC_UNUSED void *unused;
TimelineConstructionData data = { 0, };
GMainContext *ctx = g_main_context_new ();
- GstQuery *query;
+ GstQuery *query = NULL;
g_main_context_push_thread_default (ctx);
data.ml = g_main_loop_new (ctx, TRUE);
@@ -481,6 +482,7 @@
GST_OBJECT_UNLOCK (self);
g_list_free_full (assets, g_object_unref);
}
+ g_clear_pointer (&query, gst_query_unref);
done:
if (data.loaded_sigid)
@@ -574,6 +576,9 @@
goto error;
done:
+ gst_buffer_unmap (xges_buffer, &map);
+ gst_buffer_unref (xges_buffer);
+ gst_event_unref (event);
g_free (filename);
g_free (uri);
g_close (f, NULL);
@@ -591,6 +596,7 @@
GST_ELEMENT_ERROR (self, RESOURCE, READ,
("Could not map buffer containing timeline description"),
("Not info"));
+ gst_buffer_unref (xges_buffer);
}
}
default:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/gst-editing-services-1.28.2/plugins/nle/nleobject.c
new/gst-editing-services-1.28.3/plugins/nle/nleobject.c
--- old/gst-editing-services-1.28.2/plugins/nle/nleobject.c 2026-04-07
21:02:23.000000000 +0200
+++ new/gst-editing-services-1.28.3/plugins/nle/nleobject.c 2026-05-11
19:28:12.000000000 +0200
@@ -142,12 +142,14 @@
g_mutex_unlock (&query->lock);
nle_query_parent_nle_object_release (query);
+ gst_message_unref (message);
return;
}
} else if (GST_MESSAGE_TYPE (message) == GST_MESSAGE_STREAM_COLLECTION) {
GST_INFO_OBJECT (bin, "Dropping stream collection message, "
" those are internal to and should be kept as such");
+ gst_message_unref (message);
return;
}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/gst-editing-services-1.28.2/tests/check/ges/basic.c
new/gst-editing-services-1.28.3/tests/check/ges/basic.c
--- old/gst-editing-services-1.28.2/tests/check/ges/basic.c 2026-04-07
21:02:23.000000000 +0200
+++ new/gst-editing-services-1.28.3/tests/check/ges/basic.c 2026-05-11
19:28:12.000000000 +0200
@@ -1181,6 +1181,57 @@
GST_END_TEST;
+GST_START_TEST (test_ges_pipeline_shared_pool_context)
+{
+ GstState state;
+ GESAsset *asset;
+ GESLayer *layer;
+ GESTimeline *timeline;
+ GESPipeline *pipeline;
+ GstContext *context;
+ GstTaskPool *pool = NULL;
+
+ ges_init ();
+
+ layer = ges_layer_new ();
+ timeline = ges_timeline_new_audio_video ();
+ fail_unless (ges_timeline_add_layer (timeline, layer));
+
+ pipeline = ges_test_create_pipeline (timeline);
+
+ asset = ges_asset_request (GES_TYPE_TEST_CLIP, NULL, NULL);
+ ges_layer_add_asset (layer, asset, 0, 0, 10 * GST_MSECOND,
+ GES_TRACK_TYPE_UNKNOWN);
+ gst_object_unref (asset);
+
+ ges_timeline_commit (timeline);
+ ASSERT_SET_STATE (GST_ELEMENT (pipeline), GST_STATE_PLAYING,
+ GST_STATE_CHANGE_ASYNC);
+ fail_unless (gst_element_get_state (GST_ELEMENT (pipeline), &state, NULL,
+ GST_CLOCK_TIME_NONE) == GST_STATE_CHANGE_SUCCESS);
+
+ /* Verify that the pipeline stored the shared task pool context on itself
+ * so that subsequent NEED_CONTEXT requests reuse the same pool */
+ context =
+ gst_element_get_context (GST_ELEMENT (pipeline),
+ GST_TASK_POOL_CONTEXT_TYPE);
+ fail_unless (context != NULL,
+ "Pipeline should store the shared task pool context");
+ fail_unless (gst_context_get_task_pool (context, &pool));
+ fail_unless (GST_IS_SHARED_TASK_POOL (pool));
+ gst_object_unref (pool);
+ gst_context_unref (context);
+
+ ASSERT_SET_STATE (GST_ELEMENT (pipeline), GST_STATE_NULL,
+ GST_STATE_CHANGE_SUCCESS);
+
+ gst_object_unref (pipeline);
+
+ ges_deinit ();
+}
+
+GST_END_TEST;
+
static Suite *
ges_suite (void)
{
@@ -1197,6 +1248,7 @@
tcase_add_test (tc_chain, test_ges_timeline_multiple_tracks);
tcase_add_test (tc_chain, test_ges_pipeline_change_state);
tcase_add_test (tc_chain, test_ges_timeline_element_name);
+ tcase_add_test (tc_chain, test_ges_pipeline_shared_pool_context);
return s;
}
++++++ gst-editing-services.obsinfo ++++++
--- /var/tmp/diff_new_pack.6Y2PBP/_old 2026-05-13 17:21:48.613442074 +0200
+++ /var/tmp/diff_new_pack.6Y2PBP/_new 2026-05-13 17:21:48.621442406 +0200
@@ -1,5 +1,5 @@
name: gst-editing-services
-version: 1.28.2
-mtime: 1775588543
-commit: 43421c2a5b8ac5cceb52b11749df40301e1de5c0
+version: 1.28.3
+mtime: 1778520492
+commit: 62d8936e70b11a2e21ea3c68b7672b675e142945