From 731ceb58bdba1f862ac42174e9339d5766933f80 Mon Sep 17 00:00:00 2001 From: Seungha Yang Date: Tue, 15 Apr 2025 06:50:40 +0900 Subject: [PATCH] speechmatics: Handle multiple stream-start event Do not spawn new task loop with channel if we have one already Part-of: --- audio/speechmatics/src/transcriber/imp.rs | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/audio/speechmatics/src/transcriber/imp.rs b/audio/speechmatics/src/transcriber/imp.rs index 8db1aa30c..d2d8a37b0 100644 --- a/audio/speechmatics/src/transcriber/imp.rs +++ b/audio/speechmatics/src/transcriber/imp.rs @@ -878,11 +878,19 @@ impl TranscriberSrcPad { } fn start_task(&self) -> Result<(), gst::LoggableError> { + let mut state = self.state.lock().unwrap(); + + if state.sender.is_some() { + gst::debug!(CAT, imp = self, "Have task already"); + return Ok(()); + } + let this_weak = self.downgrade(); let pad_weak = self.obj().downgrade(); let (sender, mut receiver) = mpsc::channel(1); - self.state.lock().unwrap().sender = Some(sender); + state.sender = Some(sender); + drop(state); let res = self.obj().start_task(move || { let Some(this) = this_weak.upgrade() else {