Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package gstreamer-rtsp-server for 
openSUSE:Factory checked in at 2022-02-09 20:38:56
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/gstreamer-rtsp-server (Old)
 and      /work/SRC/openSUSE:Factory/.gstreamer-rtsp-server.new.1898 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "gstreamer-rtsp-server"

Wed Feb  9 20:38:56 2022 rev:32 rq:952077 version:1.18.6

Changes:
--------
--- 
/work/SRC/openSUSE:Factory/gstreamer-rtsp-server/gstreamer-rtsp-server.changes  
    2022-01-22 08:19:10.394503849 +0100
+++ 
/work/SRC/openSUSE:Factory/.gstreamer-rtsp-server.new.1898/gstreamer-rtsp-server.changes
    2022-02-09 20:39:45.562456244 +0100
@@ -1,0 +2,15 @@
+Fri Feb  4 19:45:17 UTC 2022 - Bj??rn Lie <bjorn....@gmail.com>
+
+- Update to version 1.18.6:
+  + rtsp-stream: fix get_rates raciness
+  + rtsp-media: Only unprepare a media if it was not already
+    unpreparing anyway
+  + rtsp-media: Unprepare suspended medias too
+  + rtsp-client: make sure sessmedia will not get freed while used
+  + rtsp-media: Also mark receive-only (RECORD) medias as prepared
+    when unsuspending
+  + rtsp-session: Don't unref medias twice if it is removed inside
+  + examples: Fix leak in appsrc2 example
+- Drop service, use source url, upstream changes in git.
+
+-------------------------------------------------------------------

Old:
----
  _service
  gst-rtsp-server-1.18.5.tar.xz

New:
----
  gst-rtsp-server-1.18.6.tar.xz

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ gstreamer-rtsp-server.spec ++++++
--- /var/tmp/diff_new_pack.sugAjJ/_old  2022-02-09 20:39:46.142457631 +0100
+++ /var/tmp/diff_new_pack.sugAjJ/_new  2022-02-09 20:39:46.150457651 +0100
@@ -20,15 +20,13 @@
 %define _name gst-rtsp-server
 
 Name:           gstreamer-rtsp-server
-Version:        1.18.5
+Version:        1.18.6
 Release:        0
 Summary:        GStreamer-based RTSP server library
 License:        LGPL-2.0-or-later
 Group:          Productivity/Multimedia/Other
 URL:            https://gstreamer.freedesktop.org
-# Disable tarball source url, use _service
-#Source0:        %%{url}/src/gst-rtsp-server/%%{_name}-%%{version}.tar.xz
-Source0:        %{_name}-%{version}.tar.xz
+Source0:        %{url}/src/gst-rtsp-server/%{_name}-%{version}.tar.xz
 Source99:       gstreamer-rtsp-server-rpmlintrc
 
 BuildRequires:  hotdoc

++++++ gst-rtsp-server-1.18.5.tar.xz -> gst-rtsp-server-1.18.6.tar.xz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gst-rtsp-server-1.18.5/ChangeLog 
new/gst-rtsp-server-1.18.6/ChangeLog
--- old/gst-rtsp-server-1.18.5/ChangeLog        2021-09-08 21:04:14.000000000 
+0200
+++ new/gst-rtsp-server-1.18.6/ChangeLog        2022-02-02 16:08:18.000000000 
+0100
@@ -1,3 +1,91 @@
+=== release 1.18.6 ===
+
+2022-02-02 15:08:18 +0000  Tim-Philipp M??ller <t...@centricular.com>
+
+       * ChangeLog:
+       * NEWS:
+       * RELEASE:
+       * gst-rtsp-server.doap:
+       * meson.build:
+         Release 1.18.6
+
+2021-10-07 13:00:10 +0300  Sebastian Dr??ge <sebast...@centricular.com>
+
+       * gst/rtsp-server/rtsp-media.c:
+         rtsp-media: Unprepare suspended medias too
+         Previously suspended medias immediately reached the UNPREPARED state
+         without going through the media's unprepare() vfunc. This didn't allow
+         the media subclass to do any additional cleanup, and for example the
+         shutdown-eos property of GstRTSPMedia was ignored.
+         Part-of: 
<https://gitlab.freedesktop.org/gstreamer/gst-rtsp-server/-/merge_requests/221>
+
+2022-01-20 17:13:36 -0600  Michael Gruner <michael.gru...@ridgerun.com>
+
+       * examples/test-appsrc2.c:
+         gst-rtsp-server: Fix leak in appsrc2 example
+         In the need-data appsrc callback, a buffer is pulled from the
+         appsink. This buffer is then copied so that metadata is writable.
+         The copy is pushed to the appsrc but it doesn't take ownership
+         of the buffer so we need to manually unref it. The original buffer
+         is finally unreffed when the sample is freed.
+         Part-of: 
<https://gitlab.freedesktop.org/gstreamer/gst-rtsp-server/-/merge_requests/220>
+
+2021-12-16 21:04:53 +0100  Mathieu Duponchelle <math...@centricular.com>
+
+       * gst/rtsp-server/rtsp-stream.c:
+         rtsp-stream: fix get_rates raciness
+         Prior to this patch, we considered that a stream was blocking
+         whenever a pad probe was triggered for either the RTP pad or
+         the RTCP pad.
+         This led to situations where we subsequently unblocked and expected
+         to find a segment on the RTP pad, which was racy.
+         Instead, we now only consider that the stream is blocking when
+         the pad probe for the RTP pad has triggered with a blockable object
+         (buffer, buffer list, gap event).
+         The RTCP pad is simply blocked without affecting the state of the
+         stream otherwise.
+         Fixes #929
+         Part-of: 
<https://gitlab.freedesktop.org/gstreamer/gst-rtsp-server/-/merge_requests/218>
+
+2021-10-06 18:19:29 +0300  Sebastian Dr??ge <sebast...@centricular.com>
+
+       * gst/rtsp-server/rtsp-media.c:
+         rtsp-media: Only unprepare a media if it was not already unpreparing 
anyway
+         Part-of: 
<https://gitlab.freedesktop.org/gstreamer/gst-rtsp-server/-/merge_requests/216>
+
+2021-10-03 23:25:23 +0200  Ognyan Tonchev <ogn...@axis.com>
+
+       * gst/rtsp-server/rtsp-client.c:
+       * gst/rtsp-server/rtsp-session.c:
+       * gst/rtsp-server/rtsp-session.h:
+         rtsp-client: make sure sessmedia will not get freed while used
+         handle_*_request() functions were all retrieving the session media 
from
+         the session by calling gst_rtsp_session_get_media () which is a 
transfer-none
+         call. If a session timeout happens at that time, the session media 
may get freed
+         making the pointer invalid..
+         Fixes #757
+         Part-of: 
<https://gitlab.freedesktop.org/gstreamer/gst-rtsp-server/-/merge_requests/215>
+
+2021-10-05 19:37:40 +0300  Sebastian Dr??ge <sebast...@centricular.com>
+
+       * gst/rtsp-server/rtsp-media.c:
+         rtsp-media: Also mark receive-only (RECORD) medias as prepared when 
unsuspending
+         Previously the status was only changed for other medias.
+         Part-of: 
<https://gitlab.freedesktop.org/gstreamer/gst-rtsp-server/-/merge_requests/214>
+
+2021-10-01 13:51:37 +0300  Sebastian Dr??ge <sebast...@centricular.com>
+
+       * gst/rtsp-server/rtsp-session.c:
+         rtsp-session: Don't unref medias twice if it is removed inside 
gst_rtsp_session_filter() while the mutex is shortly released
+         Fixes https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/757
+         Part-of: 
<https://gitlab.freedesktop.org/gstreamer/gst-rtsp-server/-/merge_requests/213>
+
+2021-09-09 00:13:01 +0100  Tim-Philipp M??ller <t...@centricular.com>
+
+       * docs/gst_plugins_cache.json:
+       * meson.build:
+         Back to development
+
 === release 1.18.5 ===
 
 2021-09-08 20:04:14 +0100  Tim-Philipp M??ller <t...@centricular.com>
@@ -5,6 +93,7 @@
        * ChangeLog:
        * NEWS:
        * RELEASE:
+       * docs/gst_plugins_cache.json:
        * gst-rtsp-server.doap:
        * meson.build:
          Release 1.18.5
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gst-rtsp-server-1.18.5/NEWS 
new/gst-rtsp-server-1.18.6/NEWS
--- old/gst-rtsp-server-1.18.5/NEWS     2021-09-08 21:04:14.000000000 +0200
+++ new/gst-rtsp-server-1.18.6/NEWS     2022-02-02 16:08:18.000000000 +0100
@@ -2,13 +2,13 @@
 
 GStreamer 1.18.0 was originally released on 8 September 2020.
 
-The latest bug-fix release in the 1.18 series is 1.18.5 and was released
-on 8 September 2021.
+The latest bug-fix release in the 1.18 series is 1.18.6 and was released
+on 2 February 2022.
 
 See https://gstreamer.freedesktop.org/releases/1.18/ for the latest
 version of this document.
 
-Last updated: Wednesday 8 September 2021, 11:00 UTC (log)
+Last updated: Wednesday 2 February 2022, 11:30 UTC (log)
 
 Introduction
 
@@ -2103,9 +2103,8 @@
 Known Issues
 
 -   GStreamer 1.18 versions <= 1.18.4 would fail to build on Linux with
-    Meson 0.58 due to an issue with the include directories. Either
-    apply the patch or build with an older Meson version (<= 0.57) until
-    there is a GStreamer 1.18.5 release that includes the fix.
+    Meson 0.58 due to an issue with the include directories.
+    GStreamer >= 1.18.5 includes a fix for this.
 
 Contributors
 
@@ -3183,16 +3182,180 @@
 -   List of Merge Requests applied in 1.18.5
 -   List of Issues fixed in 1.18.5
 
+1.18.6
+
+The sixth 1.18 bug-fix release (1.18.6) was released on 2 February 2022.
+
+This release only contains bugfixes and security fixes and it should be
+safe to update from 1.18.x.
+
+Highlighted bugfixes in 1.18.6
+
+-   tagdemux: Fix crash when presented with malformed files (security
+    fix)
+-   video-converter: Fix broken gamma remap with high bitdepth YUV
+    output
+-   shout2send: Fix issues with libshout >= 2.4.2
+-   mxfdemux: fix regression with VANC tracks that only contains packet
+    types we don???t handle
+-   Better plugin loading error reporting on Windows
+-   Fixes for deprecations in Python 3.10
+-   build fixes, memory leak fixes, reliability fixes
+-   security fixes
+
+gstreamer
+
+-   gstplugin: Fix for UWP build
+-   gstplugin: Better warnings on plugin load failure on Windows
+-   gst-ptp-helper: Do not disable multicast loopback
+-   concat: fix qos event handling
+-   pluginfeature: Fix object leak
+-   baseparse: fix invalid avg_bitrate after reset
+-   multiqueue: Fix query unref race on flush
+-   gst: Initialize optional event/message fields when parsing
+-   bitwriter: Fix the trailing bits lost when getting its data.
+-   multiqueue: never consider a queue that is not waiting
+-   input-selector: Use proper segments when cleaning cached buffers
+
+gst-plugins-base
+
+-   tagdemux: Fix crash when presented with malformed files (security
+    fix)
+-   videoencoder: make sure the buffer is writable before modifying
+    metadata
+-   video-converter: Fix for broken gamma remap with high bitdepth YUV
+    output
+-   sdpmessage: fix mapping single char fmtp params
+-   oggdemux: fix a race in push mode when performing the duration seek
+-   uridecodebin: Fix critical warnings
+-   audio-converter: Fix resampling when there???s nothing to output
+-   tcp: fix build on Solaris
+-   uridecodebin3: Nullify current item after all play items are freed.
+-   audio-resampler: Fix segfault when we can???t output any frames
+-   urisourcebin: Handle sources with dynamic pads and pads already
+    present
+-   playbin2/3: autoplug/caps: don???t expand caps to ANY
+-   uridecodebin3/urisourcebin: Reusability fixes
+-   rtspconnection: Only reset timeout when socket is unused
+-   gstvideoaggregator.c: fix build with gcc 4.8
+
+gst-plugins-good
+
+-   rtspsrc: Fix critical while serializing timeout element message
+-   multifilesrc: fix caps leak
+-   shout2: Add compatibility for libshout >= 2.4.2 shout_open return
+    values
+-   v4l2: Update fmt if padded height is greater than fmt height
+-   v4l2bufferpool: set video alignment of video meta
+-   qtmux: fix deadlock in gst_qt_mux_prepare_moov_recovery
+-   matroska: Add support for muxing/demuxing ffv1
+-   qtdemux: Try to build AAC codec-data whenever it???s possible
+
+gst-plugins-bad
+
+-   interlace: Fix a double-unref on shutdown
+-   webrtcbin: Chain up to parent constructed method
+-   webrtc: fix log error message in function
+    gst_webrtc_bin_set_local_description
+-   mxfdemux: don???t error out if VANC track only contains packets we
+    don???t handle
+-   av1parser: Fix data type of film grain param
+-   assrender: Support RFC8081 mime types
+-   pitch: Specify layout as required for negotiation
+-   magicleap: update lumin_rt libraries names to the latest official
+    version
+-   codecs: h265decoder: Fix per-slice leak
+-   mpeg4videoparse: fix criticals trying to insert configs that don???t
+    exist yet
+-   webrtcbin: Always set SINK/SRC flags
+-   mpegtspacketizer: memcmp potentially seen_before data
+-   zxing: update to support version 1.1.1
+
+gst-plugins-ugly
+
+-   No changes
+
+gst-libav
+
+-   avcodecmap: Add support for GBRA_10LE/BE
+
+gst-rtsp-server
+
+-   rtsp-stream: fix get_rates raciness
+-   rtsp-media: Only unprepare a media if it was not already unpreparing
+    anyway
+-   rtsp-media: Unprepare suspended medias too
+-   rtsp-client: make sure sessmedia will not get freed while used
+-   rtsp-media: Also mark receive-only (RECORD) medias as prepared when
+    unsuspending
+-   rtsp-session: Don???t unref medias twice if it is removed inside???
+-   examples: Fix leak in appsrc2 example
+
+gstreamer-vaapi
+
+-   libs: video-format: Check if formats map is not NULL
+-   vaapidecode: Autogenerate caps template
+-   vaapipostproc: copy over metadata also when using system allocated
+    buffer
+
+gst-python
+
+-   Avoid treating float as int (fix for Python 3.10)
+
+gst-editing-services
+
+-   meson: Remove duplicate definition of ???examples??? option
+
+gst-devtools
+
+-   No changes
+
+gst-integration-testsuites
+
+-   No changes
+
+gst-build
+
+-   env: Fix deprecations from python 3.10
+-   Various fixes for macOS
+-   update FFmpeg wrap to 4.3.3
+
+Cerbero build tool and packaging changes in 1.18.6
+
+-   Some fixes for Fedora 34
+-   cerbero: Backport fix for removed loop param of PriorityQueue()
+-   cerbero: Fix support for Fedora 35
+-   Add support for Visual Studio 2022
+-   openssl.recipe: Fix crash on iOS TestFlight
+-   UnixBootstrapper: remove sudo as root user
+-   bzip2.recipe: bump version to 1.0.8
+-   openssl.recipe: upgrade to version 1.1.1l
+
+Contributors to 1.18.6
+
+Antonio Ospite, C??lestin Marot, Dave Pich??, Erlend Eriksen, Fabrice
+Fontaine, Guillaume Desmottes, Haihua Hu, He Junyan, Jakub Adam, Jan
+Alexander Steffens (heftig), Jan Schmidt, Jeremy Cline, Jordan Petridis,
+Mathieu Duponchelle, Matthew Waters, Mengkejiergeli Ba, Michael Gruner,
+Nirbheek Chauhan, Ognyan Tonchev, Pascal Hache, Rafa?? Dzi??giel,
+Sebastian Dr??ge, Seungha Yang, St??phane Cerveau, Teng En Ung,Thibault
+Saunier, Thomas Klausner, Tim-Philipp M??ller, Tobias Reineke, Tobias
+Ronge, Tomasz Andrzejak, Trung Do, V??ctor Manuel J??quez Leal, Vivia
+Nikolaidou,
+
+??? and many others who have contributed bug reports, translations, sent
+suggestions or helped testing. Thank you all!
+
+List of merge requests and issues fixed in 1.18.6
+
+-   List of Merge Requests applied in 1.18.6
+-   List of Issues fixed in 1.18.6
+
 Schedule for 1.20
 
-Our next major feature release will be 1.20, and 1.19 will be the
-unstable development version leading up to the stable 1.20 release. The
-development of 1.19/1.20 will happen in the git master branch.
-
-The plan for the 1.20 development cycle is yet to be confirmed, but it
-is now expected that feature freeze will take place some time in
-September/October 2021, with the first 1.20 stable release hopefully
-towards the end of October 2021.
+Our next major feature release will be 1.20, and will be released in
+early February 2022. You can track its progress on the 1.20 Release
+Notes page.
 
 1.20 will be backwards-compatible to the stable 1.18, 1.16, 1.14, 1.12,
 1.10, 1.8, 1.6, 1.4, 1.2 and 1.0 release series.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gst-rtsp-server-1.18.5/RELEASE 
new/gst-rtsp-server-1.18.6/RELEASE
--- old/gst-rtsp-server-1.18.5/RELEASE  2021-09-08 21:04:14.000000000 +0200
+++ new/gst-rtsp-server-1.18.6/RELEASE  2022-02-02 16:08:18.000000000 +0100
@@ -1,4 +1,4 @@
-This is GStreamer gst-rtsp-server 1.18.5.
+This is GStreamer gst-rtsp-server 1.18.6.
 
 The GStreamer team is thrilled to announce a new major feature release
 of your favourite cross-platform multimedia framework!
@@ -82,7 +82,7 @@
 For help and support, please subscribe to and send questions to the
 gstreamer-devel mailing list (see below for details).
 
-There is also a #gstreamer IRC channel on the Freenode IRC network.
+There is also a #gstreamer IRC channel on the OFTC IRC network.
 
 ==== Developers ====
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gst-rtsp-server-1.18.5/docs/gst_plugins_cache.json 
new/gst-rtsp-server-1.18.6/docs/gst_plugins_cache.json
--- old/gst-rtsp-server-1.18.5/docs/gst_plugins_cache.json      2021-09-08 
21:04:14.000000000 +0200
+++ new/gst-rtsp-server-1.18.6/docs/gst_plugins_cache.json      2022-02-02 
16:08:18.000000000 +0100
@@ -321,7 +321,7 @@
                         "construct": false,
                         "construct-only": false,
                         "controllable": false,
-                        "default": "GStreamer/1.18.5",
+                        "default": "GStreamer/1.18.6",
                         "mutable": "null",
                         "readable": true,
                         "type": "gchararray",
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gst-rtsp-server-1.18.5/examples/test-appsrc2.c 
new/gst-rtsp-server-1.18.6/examples/test-appsrc2.c
--- old/gst-rtsp-server-1.18.5/examples/test-appsrc2.c  2021-09-08 
21:04:14.000000000 +0200
+++ new/gst-rtsp-server-1.18.6/examples/test-appsrc2.c  2022-02-02 
16:08:18.000000000 +0100
@@ -63,6 +63,7 @@
       GST_BUFFER_PTS (buffer) = pts;
       GST_BUFFER_DTS (buffer) = dts;
       g_signal_emit_by_name (appsrc, "push-buffer", buffer, &ret);
+      gst_buffer_unref (buffer);
     }
 
     /* we don't need the appsink sample anymore */
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gst-rtsp-server-1.18.5/gst/rtsp-server/rtsp-client.c 
new/gst-rtsp-server-1.18.6/gst/rtsp-server/rtsp-client.c
--- old/gst-rtsp-server-1.18.5/gst/rtsp-server/rtsp-client.c    2021-09-08 
21:04:14.000000000 +0200
+++ new/gst-rtsp-server-1.18.6/gst/rtsp-server/rtsp-client.c    2022-02-02 
16:08:18.000000000 +0100
@@ -1445,7 +1445,7 @@
   path = klass->make_path_from_uri (client, ctx->uri);
 
   /* get a handle to the configuration of the media in the session */
-  sessmedia = gst_rtsp_session_get_media (session, path, &matched);
+  sessmedia = gst_rtsp_session_dup_media (session, path, &matched);
   if (!sessmedia)
     goto not_found;
 
@@ -1480,6 +1480,7 @@
   /* unmanage the media in the session, returns false if all media session
    * are torn down. */
   keep_session = gst_rtsp_session_release_media (session, sessmedia);
+  g_object_unref (sessmedia);
 
   /* construct the response now */
   code = GST_RTSP_STS_OK;
@@ -1530,6 +1531,7 @@
     send_generic_response (client,
         GST_RTSP_STS_ONLY_AGGREGATE_OPERATION_ALLOWED, ctx);
     g_free (path);
+    g_object_unref (sessmedia);
     return FALSE;
   }
 sig_failed:
@@ -1539,6 +1541,7 @@
     send_generic_response (client, sig_result, ctx);
     gst_rtsp_media_unlock (media);
     g_object_unref (media);
+    g_object_unref (sessmedia);
     return FALSE;
   }
 }
@@ -1697,7 +1700,7 @@
   path = klass->make_path_from_uri (client, ctx->uri);
 
   /* get a handle to the configuration of the media in the session */
-  sessmedia = gst_rtsp_session_get_media (session, path, &matched);
+  sessmedia = gst_rtsp_session_dup_media (session, path, &matched);
   if (!sessmedia)
     goto not_found;
 
@@ -1744,6 +1747,7 @@
 
   /* the state is now READY */
   gst_rtsp_session_media_set_rtsp_state (sessmedia, GST_RTSP_STATE_READY);
+  g_object_unref (sessmedia);
 
   g_signal_emit (client, gst_rtsp_client_signals[SIGNAL_PAUSE_REQUEST], 0, 
ctx);
 
@@ -1777,6 +1781,7 @@
     GST_ERROR ("client %p: no aggregate path %s", client, path);
     send_generic_response (client,
         GST_RTSP_STS_ONLY_AGGREGATE_OPERATION_ALLOWED, ctx);
+    g_object_unref (sessmedia);
     g_free (path);
     return FALSE;
   }
@@ -1786,6 +1791,7 @@
         gst_rtsp_status_as_text (sig_result));
     send_generic_response (client, sig_result, ctx);
     gst_rtsp_media_unlock (media);
+    g_object_unref (sessmedia);
     g_object_unref (media);
     return FALSE;
   }
@@ -1795,6 +1801,7 @@
     send_generic_response (client, GST_RTSP_STS_METHOD_NOT_VALID_IN_THIS_STATE,
         ctx);
     gst_rtsp_media_unlock (media);
+    g_object_unref (sessmedia);
     g_object_unref (media);
     return FALSE;
   }
@@ -1803,6 +1810,7 @@
     GST_ERROR ("client %p: pausing not supported", client);
     send_generic_response (client, GST_RTSP_STS_BAD_REQUEST, ctx);
     gst_rtsp_media_unlock (media);
+    g_object_unref (sessmedia);
     g_object_unref (media);
     return FALSE;
   }
@@ -2066,7 +2074,7 @@
   path = klass->make_path_from_uri (client, uri);
 
   /* get a handle to the configuration of the media in the session */
-  sessmedia = gst_rtsp_session_get_media (session, path, &matched);
+  sessmedia = gst_rtsp_session_dup_media (session, path, &matched);
   if (!sessmedia)
     goto not_found;
 
@@ -2161,6 +2169,7 @@
   gst_rtsp_session_media_set_state (sessmedia, GST_STATE_PLAYING);
 
   gst_rtsp_session_media_set_rtsp_state (sessmedia, GST_RTSP_STATE_PLAYING);
+  g_object_unref (sessmedia);
 
   g_signal_emit (client, gst_rtsp_client_signals[SIGNAL_PLAY_REQUEST], 0, ctx);
 
@@ -2193,6 +2202,7 @@
     GST_ERROR ("client %p: no aggregate path %s", client, path);
     send_generic_response (client,
         GST_RTSP_STS_ONLY_AGGREGATE_OPERATION_ALLOWED, ctx);
+    g_object_unref (sessmedia);
     g_free (path);
     return FALSE;
   }
@@ -2203,6 +2213,7 @@
     send_generic_response (client, sig_result, ctx);
     gst_rtsp_media_unlock (media);
     g_object_unref (media);
+    g_object_unref (sessmedia);
     return FALSE;
   }
 invalid_state:
@@ -2212,6 +2223,7 @@
         ctx);
     gst_rtsp_media_unlock (media);
     g_object_unref (media);
+    g_object_unref (sessmedia);
     return FALSE;
   }
 pipeline_error:
@@ -2221,6 +2233,7 @@
         ctx);
     gst_rtsp_media_unlock (media);
     g_object_unref (media);
+    g_object_unref (sessmedia);
     return FALSE;
   }
 unsuspend_failed:
@@ -2229,6 +2242,7 @@
     send_generic_response (client, GST_RTSP_STS_SERVICE_UNAVAILABLE, ctx);
     gst_rtsp_media_unlock (media);
     g_object_unref (media);
+    g_object_unref (sessmedia);
     return FALSE;
   }
 invalid_mode:
@@ -2237,6 +2251,7 @@
     send_generic_response (client, code, ctx);
     gst_rtsp_media_unlock (media);
     g_object_unref (media);
+    g_object_unref (sessmedia);
     return FALSE;
   }
 unsupported_mode:
@@ -2245,6 +2260,7 @@
     send_generic_response (client, GST_RTSP_STS_METHOD_NOT_ALLOWED, ctx);
     gst_rtsp_media_unlock (media);
     g_object_unref (media);
+    g_object_unref (sessmedia);
     return FALSE;
   }
 get_rates_error:
@@ -2253,6 +2269,7 @@
     send_generic_response (client, GST_RTSP_STS_INTERNAL_SERVER_ERROR, ctx);
     gst_rtsp_media_unlock (media);
     g_object_unref (media);
+    g_object_unref (sessmedia);
     return FALSE;
   }
 adjust_play_response_failed:
@@ -2261,6 +2278,7 @@
     send_generic_response (client, code, ctx);
     gst_rtsp_media_unlock (media);
     g_object_unref (media);
+    g_object_unref (sessmedia);
     return FALSE;
   }
 rtp_info_error:
@@ -2269,6 +2287,7 @@
     send_generic_response (client, GST_RTSP_STS_INTERNAL_SERVER_ERROR, ctx);
     gst_rtsp_media_unlock (media);
     g_object_unref (media);
+    g_object_unref (sessmedia);
     return FALSE;
   }
 }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gst-rtsp-server-1.18.5/gst/rtsp-server/rtsp-media.c 
new/gst-rtsp-server-1.18.6/gst/rtsp-server/rtsp-media.c
--- old/gst-rtsp-server-1.18.5/gst/rtsp-server/rtsp-media.c     2021-09-08 
21:04:14.000000000 +0200
+++ new/gst-rtsp-server-1.18.6/gst/rtsp-server/rtsp-media.c     2022-02-02 
16:08:18.000000000 +0100
@@ -4083,12 +4083,15 @@
   priv->prepare_count--;
   if (priv->prepare_count > 0)
     goto is_busy;
+  if (priv->status == GST_RTSP_MEDIA_STATUS_UNPREPARING)
+    goto is_unpreparing;
 
   GST_INFO ("unprepare media %p", media);
   set_target_state (media, GST_STATE_NULL, FALSE);
   success = TRUE;
 
-  if (priv->status == GST_RTSP_MEDIA_STATUS_PREPARED) {
+  if (priv->status == GST_RTSP_MEDIA_STATUS_PREPARED
+      || priv->status == GST_RTSP_MEDIA_STATUS_SUSPENDED) {
     GstRTSPMediaClass *klass;
 
     klass = GST_RTSP_MEDIA_GET_CLASS (media);
@@ -4108,6 +4111,12 @@
     GST_INFO ("media %p was already unprepared", media);
     return TRUE;
   }
+is_unpreparing:
+  {
+    g_rec_mutex_unlock (&priv->state_lock);
+    GST_INFO ("media %p is already unpreparing", media);
+    return TRUE;
+  }
 is_busy:
   {
     GST_INFO ("media %p still prepared %d times", media, priv->prepare_count);
@@ -4614,9 +4623,8 @@
 
   switch (priv->suspend_mode) {
     case GST_RTSP_SUSPEND_MODE_NONE:
-      if (gst_rtsp_media_is_receive_only (media))
-        break;
-      if (media_streams_blocking (media)) {
+      if (!gst_rtsp_media_is_receive_only (media)
+          && media_streams_blocking (media)) {
         g_rec_mutex_unlock (&priv->state_lock);
         if (gst_rtsp_media_get_status (media) == GST_RTSP_MEDIA_STATUS_ERROR) {
           g_rec_mutex_lock (&priv->state_lock);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/gst-rtsp-server-1.18.5/gst/rtsp-server/rtsp-session.c 
new/gst-rtsp-server-1.18.6/gst/rtsp-server/rtsp-session.c
--- old/gst-rtsp-server-1.18.5/gst/rtsp-server/rtsp-session.c   2021-09-08 
21:04:14.000000000 +0200
+++ new/gst-rtsp-server-1.18.6/gst/rtsp-server/rtsp-session.c   2022-02-02 
16:08:18.000000000 +0100
@@ -343,20 +343,9 @@
   return more;
 }
 
-/**
- * gst_rtsp_session_get_media:
- * @sess: a #GstRTSPSession
- * @path: the path for the media
- * @matched: (out): the amount of matched characters
- *
- * Get the session media for @path. @matched will contain the number of matched
- * characters of @path.
- *
- * Returns: (transfer none) (nullable): the configuration for @path in @sess.
- */
-GstRTSPSessionMedia *
-gst_rtsp_session_get_media (GstRTSPSession * sess, const gchar * path,
-    gint * matched)
+static GstRTSPSessionMedia *
+_gst_rtsp_session_get_media (GstRTSPSession * sess, const gchar * path,
+    gint * matched, gboolean dup)
 {
   GstRTSPSessionPrivate *priv;
   GstRTSPSessionMedia *result;
@@ -384,6 +373,9 @@
       }
     }
   }
+
+  if (result && dup)
+    result = g_object_ref (result);
   g_mutex_unlock (&priv->lock);
 
   *matched = best;
@@ -392,6 +384,45 @@
 }
 
 /**
+ * gst_rtsp_session_get_media:
+ * @sess: a #GstRTSPSession
+ * @path: the path for the media
+ * @matched: (out): the amount of matched characters
+ *
+ * Gets the session media for @path. @matched will contain the number of 
matched
+ * characters of @path.
+ *
+ * Returns: (transfer none) (nullable): the configuration for @path in @sess.
+ */
+GstRTSPSessionMedia *
+gst_rtsp_session_get_media (GstRTSPSession * sess, const gchar * path,
+    gint * matched)
+{
+  return _gst_rtsp_session_get_media (sess, path, matched, FALSE);
+}
+
+/**
+ * gst_rtsp_session_dup_media:
+ * @sess: a #GstRTSPSession
+ * @path: the path for the media
+ * @matched: (out): the amount of matched characters
+ *
+ * Gets the session media for @path, increasing its reference count. @matched
+ * will contain the number of matched characters of @path.
+ *
+ * Returns: (transfer full) (nullable): the configuration for @path in @sess,
+ * should be unreferenced when no longer needed.
+ *
+ * Since: 1.20
+ */
+GstRTSPSessionMedia *
+gst_rtsp_session_dup_media (GstRTSPSession * sess, const gchar * path,
+    gint * matched)
+{
+  return _gst_rtsp_session_get_media (sess, path, matched, TRUE);
+}
+
+/**
  * gst_rtsp_session_filter:
  * @sess: a #GstRTSPSession
  * @func: (scope call) (allow-none): a callback
@@ -454,19 +485,38 @@
       res = func (sess, media, user_data);
 
       g_mutex_lock (&priv->lock);
-    } else
+    } else {
       res = GST_RTSP_FILTER_REF;
+    }
 
     changed = (cookie != priv->medias_cookie);
 
     switch (res) {
       case GST_RTSP_FILTER_REMOVE:
-        if (changed)
-          priv->medias = g_list_remove (priv->medias, media);
-        else
+        if (changed) {
+          GList *l;
+
+          walk = NULL;
+
+          for (l = priv->medias; l; l = l->next) {
+            if (l->data == media) {
+              walk = l;
+              break;
+            }
+          }
+        }
+
+        /* The media might have been removed from the list while the mutex was
+         * unlocked above. In that case there's nothing else to do here as the
+         * only reference to the media owned by this function is in the
+         * visited hash table and that is released in the end
+         */
+        if (walk) {
           priv->medias = g_list_delete_link (priv->medias, walk);
+          g_object_unref (media);
+        }
+
         cookie = ++priv->medias_cookie;
-        g_object_unref (media);
         break;
       case GST_RTSP_FILTER_REF:
         result = g_list_prepend (result, g_object_ref (media));
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/gst-rtsp-server-1.18.5/gst/rtsp-server/rtsp-session.h 
new/gst-rtsp-server-1.18.6/gst/rtsp-server/rtsp-session.h
--- old/gst-rtsp-server-1.18.5/gst/rtsp-server/rtsp-session.h   2021-09-08 
21:04:14.000000000 +0200
+++ new/gst-rtsp-server-1.18.6/gst/rtsp-server/rtsp-session.h   2022-02-02 
16:08:18.000000000 +0100
@@ -141,7 +141,12 @@
 GstRTSPSessionMedia *  gst_rtsp_session_get_media            (GstRTSPSession 
*sess,
                                                               const gchar 
*path,
                                                               gint * matched);
+/* get media in a session, increasing its reference count */
 
+GST_RTSP_SERVER_API
+GstRTSPSessionMedia *  gst_rtsp_session_dup_media            (GstRTSPSession 
*sess,
+                                                              const gchar 
*path,
+                                                              gint * matched);
 /**
  * GstRTSPSessionFilterFunc:
  * @sess: a #GstRTSPSession object
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gst-rtsp-server-1.18.5/gst/rtsp-server/rtsp-stream.c 
new/gst-rtsp-server-1.18.6/gst/rtsp-server/rtsp-stream.c
--- old/gst-rtsp-server-1.18.5/gst/rtsp-server/rtsp-stream.c    2021-09-08 
21:04:14.000000000 +0200
+++ new/gst-rtsp-server-1.18.6/gst/rtsp-server/rtsp-stream.c    2022-02-02 
16:08:18.000000000 +0100
@@ -5219,7 +5219,7 @@
 }
 
 static GstPadProbeReturn
-pad_blocking (GstPad * pad, GstPadProbeInfo * info, gpointer user_data)
+rtp_pad_blocking (GstPad * pad, GstPadProbeInfo * info, gpointer user_data)
 {
   GstRTSPStreamPrivate *priv;
   GstRTSPStream *stream;
@@ -5306,6 +5306,41 @@
   return ret;
 }
 
+static GstPadProbeReturn
+rtcp_pad_blocking (GstPad * pad, GstPadProbeInfo * info, gpointer user_data)
+{
+  GstRTSPStreamPrivate *priv;
+  GstRTSPStream *stream;
+  GstPadProbeReturn ret = GST_PAD_PROBE_OK;
+
+  stream = user_data;
+  priv = stream->priv;
+
+  g_mutex_lock (&priv->lock);
+
+  if ((info->type & GST_PAD_PROBE_TYPE_BUFFER) ||
+      (info->type & GST_PAD_PROBE_TYPE_BUFFER_LIST)) {
+    GST_DEBUG_OBJECT (pad, "Now blocking on buffer");
+  } else if ((info->type & GST_PAD_PROBE_TYPE_EVENT_DOWNSTREAM)) {
+    if (GST_EVENT_TYPE (info->data) == GST_EVENT_GAP) {
+      GST_DEBUG_OBJECT (pad, "Now blocking on gap event");
+      ret = GST_PAD_PROBE_OK;
+    } else {
+      ret = GST_PAD_PROBE_PASS;
+      g_mutex_unlock (&priv->lock);
+      goto done;
+    }
+  } else {
+    g_assert_not_reached ();
+  }
+
+  g_mutex_unlock (&priv->lock);
+
+done:
+  return ret;
+}
+
+
 static void
 set_blocked (GstRTSPStream * stream, gboolean blocked)
 {
@@ -5330,11 +5365,20 @@
         priv->blocked_buffer = FALSE;
         priv->blocked_running_time = GST_CLOCK_TIME_NONE;
         priv->blocked_clock_rate = 0;
-        priv->blocked_id[i] = gst_pad_add_probe (priv->send_src[i],
-            GST_PAD_PROBE_TYPE_BLOCK | GST_PAD_PROBE_TYPE_BUFFER |
-            GST_PAD_PROBE_TYPE_BUFFER_LIST |
-            GST_PAD_PROBE_TYPE_EVENT_DOWNSTREAM, pad_blocking,
-            g_object_ref (stream), g_object_unref);
+
+        if (i == 0) {
+          priv->blocked_id[i] = gst_pad_add_probe (priv->send_src[i],
+              GST_PAD_PROBE_TYPE_BLOCK | GST_PAD_PROBE_TYPE_BUFFER |
+              GST_PAD_PROBE_TYPE_BUFFER_LIST |
+              GST_PAD_PROBE_TYPE_EVENT_DOWNSTREAM, rtp_pad_blocking,
+              g_object_ref (stream), g_object_unref);
+        } else {
+          priv->blocked_id[i] = gst_pad_add_probe (priv->send_src[i],
+              GST_PAD_PROBE_TYPE_BLOCK | GST_PAD_PROBE_TYPE_BUFFER |
+              GST_PAD_PROBE_TYPE_BUFFER_LIST |
+              GST_PAD_PROBE_TYPE_EVENT_DOWNSTREAM, rtcp_pad_blocking,
+              g_object_ref (stream), g_object_unref);
+        }
       }
     }
   } else {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gst-rtsp-server-1.18.5/gst-rtsp-server.doap 
new/gst-rtsp-server-1.18.6/gst-rtsp-server.doap
--- old/gst-rtsp-server-1.18.5/gst-rtsp-server.doap     2021-09-08 
21:04:14.000000000 +0200
+++ new/gst-rtsp-server-1.18.6/gst-rtsp-server.doap     2022-02-02 
16:08:18.000000000 +0100
@@ -32,6 +32,16 @@
 
  <release>
   <Version>
+   <revision>1.18.6</revision>
+   <branch>1.18</branch>
+   <name></name>
+   <created>2022-02-02</created>
+   <file-release 
rdf:resource="https://gstreamer.freedesktop.org/src/gst-rtsp-server/gst-rtsp-server-1.18.6.tar.xz";
 />
+  </Version>
+ </release>
+
+ <release>
+  <Version>
    <revision>1.18.5</revision>
    <branch>1.18</branch>
    <name></name>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gst-rtsp-server-1.18.5/meson.build 
new/gst-rtsp-server-1.18.6/meson.build
--- old/gst-rtsp-server-1.18.5/meson.build      2021-09-08 21:04:14.000000000 
+0200
+++ new/gst-rtsp-server-1.18.6/meson.build      2022-02-02 16:08:18.000000000 
+0100
@@ -1,5 +1,5 @@
 project('gst-rtsp-server', 'c',
-  version : '1.18.5',
+  version : '1.18.6',
   meson_version : '>= 0.48',
   default_options : ['warning_level=1', 'buildtype=debugoptimized'])
 

Reply via email to