From 5ee8ee8545b4c16422a5e551a38249723e18905b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20Dr=C3=B6ge?= Date: Fri, 10 Nov 2023 09:45:09 +0200 Subject: [PATCH] utils: streamproducer: Don't use `gst_element_send_event()` in another place It can cause deadlocks thanks to taking the state lock. --- gstreamer-utils/src/streamproducer.rs | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/gstreamer-utils/src/streamproducer.rs b/gstreamer-utils/src/streamproducer.rs index a741a046d..89edcb965 100644 --- a/gstreamer-utils/src/streamproducer.rs +++ b/gstreamer-utils/src/streamproducer.rs @@ -202,7 +202,9 @@ impl StreamProducer { if gst_video::UpstreamForceKeyUnitEvent::parse(event).is_ok() { gst::debug!(CAT, obj: &appsink, "Requesting keyframe"); - let _ = appsink.send_event(event.clone()); + // Do not use `gst_element_send_event()` as it takes the state lock which may lead to dead locks. + let pad = appsink.static_pad("sink").unwrap(); + let _ = pad.push_event(event.clone()); } gst::PadProbeReturn::Ok