From fc0b433e29d75b704603b4d0411898e17ef8b603 Mon Sep 17 00:00:00 2001 From: Taruntej Kanakamalla Date: Tue, 1 Jul 2025 13:33:59 +0530 Subject: [PATCH] webrtcsink: fix deadlock on error setting remote description Avoids another attempt to lock the sesion mutex recursively. Take a copy of the session id string to be passed to the signaller and drop the session mutex after removal of session from the hashmap Part-of: --- net/webrtc/src/webrtcsink/imp.rs | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/net/webrtc/src/webrtcsink/imp.rs b/net/webrtc/src/webrtcsink/imp.rs index 0ae99739e..845871795 100644 --- a/net/webrtc/src/webrtcsink/imp.rs +++ b/net/webrtc/src/webrtcsink/imp.rs @@ -3767,12 +3767,14 @@ impl BaseWebRTCSink { if remove { let _ = state.sessions.remove(&session.id); + let session_id = session.id.clone(); + drop(session); state.finalize_session(&self.obj(), Session(session_clone.clone())); drop(state_guard); let settings = self.settings.lock().unwrap(); let signaller = settings.signaller.clone(); drop(settings); - signaller.end_session(&session.id); + signaller.end_session(&session_id); } }