From 5b178caadfce26eca17e759439329e38e8900cb7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?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 6f1446bc6c..0d3de3842a 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); }