From ce24ca965e0014930ca424c28e21a3531b28c141 Mon Sep 17 00:00:00 2001 From: Seungha Yang Date: Tue, 8 Mar 2022 22:38:55 +0900 Subject: [PATCH] transcriberbin: Fix deadlock Fix race between latency query handler and setup_transcription() method. Locking order of setup_transcription() is state lock -> setup_transcription() -> settings lock So taking state lock inside of setting lock in src_query() can cause deadlock. --- video/closedcaption/src/transcriberbin/imp.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/video/closedcaption/src/transcriberbin/imp.rs b/video/closedcaption/src/transcriberbin/imp.rs index 34056002..176238ff 100644 --- a/video/closedcaption/src/transcriberbin/imp.rs +++ b/video/closedcaption/src/transcriberbin/imp.rs @@ -396,7 +396,6 @@ impl TranscriberBin { if ret { let (_, mut min, _) = upstream_query.result(); - let settings = self.settings.lock().unwrap(); let received_framerate = { let state = self.state.lock().unwrap(); if let Some(state) = state.as_ref() { @@ -406,6 +405,7 @@ impl TranscriberBin { } }; + let settings = self.settings.lock().unwrap(); if settings.passthrough || !received_framerate { min += settings.latency + settings.accumulate_time; } else if settings.mode.is_rollup() {