From 2952caab9c734a79aa1c3ee8b81a488b72bc2b88 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Sebastian=20Dr=C3=B6ge?= Date: Tue, 4 Apr 2023 20:03:31 +0300 Subject: [PATCH] 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: --- subprojects/gst-rtsp-server/gst/rtsp-server/rtsp-media.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) 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); } -- 2.7.4