From 7d8e43233d6a8b4e3277a13426623a0b0586b538 Mon Sep 17 00:00:00 2001 From: Kateryna Kostiuk <kateryna.kostiuk@savoirfairelinux.com> Date: Wed, 29 Apr 2020 11:51:20 -0400 Subject: [PATCH] call: avoid deadlock on hangup This patch move checkAudio() out of call mutex. Because it could cause deadlock if subcallStateChanged() called at the same time. Change-Id: Iee06874fb79c8e0953e061f7a669b3f61f13d8b9 --- src/call.cpp | 1 - src/sip/sipcall.cpp | 15 +++++++++------ 2 files changed, 9 insertions(+), 7 deletions(-) diff --git a/src/call.cpp b/src/call.cpp index eca7f5ab36..b75637c6ca 100644 --- a/src/call.cpp +++ b/src/call.cpp @@ -152,7 +152,6 @@ Call::removeCall() setState(CallState::OVER); if (Recordable::isRecording()) Recordable::stopRecording(); - Manager::instance().checkAudio(); } const std::string& diff --git a/src/sip/sipcall.cpp b/src/sip/sipcall.cpp index 4732252d0a..cf541fc855 100644 --- a/src/sip/sipcall.cpp +++ b/src/sip/sipcall.cpp @@ -763,12 +763,15 @@ SIPCall::sendTextMessage(const std::map<std::string, std::string>& messages, void SIPCall::removeCall() { - std::lock_guard<std::recursive_mutex> lk {callMutex_}; - JAMI_WARN("[call:%s] removeCall()", getCallId().c_str()); - Call::removeCall(); - mediaTransport_.reset(); - inv.reset(); - setTransport({}); + { + std::lock_guard<std::recursive_mutex> lk {callMutex_}; + JAMI_WARN("[call:%s] removeCall()", getCallId().c_str()); + Call::removeCall(); + mediaTransport_.reset(); + inv.reset(); + setTransport({}); + } + Manager::instance().checkAudio(); } void -- GitLab