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
 

Reply via email to