From 51149184dda6552be6d92b3fe66c8d72327a6326 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Blin?= <sebastien.blin@savoirfairelinux.com> Date: Mon, 11 Jan 2021 09:57:40 -0500 Subject: [PATCH] sipcall: move ice deletion to avoid deadlock Change-Id: I1ea5192fd33c3fb4ad9270974aa9ab55cc7c54d0 GitLab: #384 --- src/sip/sipcall.cpp | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/src/sip/sipcall.cpp b/src/sip/sipcall.cpp index f6f466ff88..602cf9a090 100644 --- a/src/sip/sipcall.cpp +++ b/src/sip/sipcall.cpp @@ -1635,7 +1635,6 @@ SIPCall::initIceMediaTransport(bool master, JAMI_ERR("No account detected"); return false; } - std::lock_guard<std::mutex> lk(transportMtx_); JAMI_DBG("[call:%s] create media ICE transport", getCallId().c_str()); auto iceOptions = options == std::nullopt ? acc->getIceOptions() : *options; @@ -1677,10 +1676,16 @@ SIPCall::initIceMediaTransport(bool master, }; auto& iceTransportFactory = Manager::instance().getIceTransportFactory(); - tmpMediaTransport_ = iceTransportFactory.createUTransport(getCallId().c_str(), + auto transport = iceTransportFactory.createUTransport(getCallId().c_str(), channel_num, master, iceOptions); + std::lock_guard<std::mutex> lk(transportMtx_); + // Destroy old ice on a separate io pool + if (tmpMediaTransport_) + dht::ThreadPool::io().run([ice = std::make_shared<decltype(tmpMediaTransport_)>( + std::move(tmpMediaTransport_))] {}); + tmpMediaTransport_ = std::move(transport); return static_cast<bool>(tmpMediaTransport_); } -- GitLab