diff --git a/src/sip/sipcall.cpp b/src/sip/sipcall.cpp index 71b9cc6b040e6a1dcd9dab8f77532990196b3837..3fa2829385f78add7bfda0f9cd0bfcc1366e81c0 100644 --- a/src/sip/sipcall.cpp +++ b/src/sip/sipcall.cpp @@ -1251,8 +1251,12 @@ SIPCall::waitForIceAndStartMedia() // Nego succeed: move to the new media transport call->stopAllMedia(); - if (call->tmpMediaTransport_) + if (call->tmpMediaTransport_) { + // Destroy the ICE media transport on another thread. This can take quite some time. + if (call->mediaTransport_) + dht::ThreadPool::io().run([ice=std::make_shared<decltype(call->mediaTransport_)>(std::move(call->mediaTransport_))] { }); call->mediaTransport_ = std::move(call->tmpMediaTransport_); + } call->startAllMedia(); return false; }