From: Sebastian Dröge Date: Tue, 4 Apr 2023 17:03:31 +0000 (+0300) Subject: rtsp-server: media: First set state to PLAYING again temporarily, then send EOS X-Git-Tag: 1.22.7~375 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=2952caab9c734a79aa1c3ee8b81a488b72bc2b88;p=platform%2Fupstream%2Fgstreamer.git rtsp-server: media: First set state to PLAYING again temporarily, then send EOS Sending the EOS event while the pipeline is PAUSED can deadlock on the stream lock if a sink is currently blocked because of pre-rolling. Part-of: --- diff --git a/subprojects/gst-rtsp-server/gst/rtsp-server/rtsp-media.c b/subprojects/gst-rtsp-server/gst/rtsp-server/rtsp-media.c index b5c300d..8c62b0d 100644 --- a/subprojects/gst-rtsp-server/gst/rtsp-server/rtsp-media.c +++ b/subprojects/gst-rtsp-server/gst/rtsp-server/rtsp-media.c @@ -4102,12 +4102,12 @@ default_unprepare (GstRTSPMedia * media) gst_rtsp_media_set_status (media, GST_RTSP_MEDIA_STATUS_UNPREPARING); if (priv->eos_shutdown) { - GST_DEBUG ("sending EOS for shutdown"); - /* ref so that we don't disappear */ - gst_element_send_event (priv->pipeline, gst_event_new_eos ()); /* we need to go to playing again for the EOS to propagate, normally in this * state, nothing is receiving data from us anymore so this is ok. */ + GST_DEBUG ("Temporarily go to PLAYING again for sending EOS"); set_state (media, GST_STATE_PLAYING); + GST_DEBUG ("sending EOS for shutdown"); + gst_element_send_event (priv->pipeline, gst_event_new_eos ()); } else { finish_unprepare (media); }