diff --git a/src/sip/sipcall.cpp b/src/sip/sipcall.cpp index c4e1c578f988e4ad06275ec5079c961b96b4da08..e34ed83119df03dc4d77d76caff2fd42df22c229 100644 --- a/src/sip/sipcall.cpp +++ b/src/sip/sipcall.cpp @@ -103,6 +103,8 @@ SIPCall::SIPCall(SIPAccountBase& account, const std::string& id, Call::CallType SIPCall::~SIPCall() { std::lock_guard<std::recursive_mutex> lk {callMutex_}; + if (tmpMediaTransport_) + dht::ThreadPool::io().run([ice=std::make_shared<decltype(tmpMediaTransport_)>(std::move(tmpMediaTransport_))] { }); setTransport({}); inv.reset(); // prevents callback usage } @@ -1381,7 +1383,7 @@ SIPCall::initIceMediaTransport(bool master, unsigned channel_num) JAMI_DBG("[call:%s] create media ICE transport", getCallId().c_str()); auto& iceTransportFactory = Manager::instance().getIceTransportFactory(); - tmpMediaTransport_ = iceTransportFactory.createTransport(getCallId().c_str(), + tmpMediaTransport_ = iceTransportFactory.createUTransport(getCallId().c_str(), channel_num, master, getAccount().getIceOptions()); return static_cast<bool>(tmpMediaTransport_); diff --git a/src/sip/sipcall.h b/src/sip/sipcall.h index 9e2cd2b27313fc35642900671f4c129d069f75c6..aa4bbbc942093d794fc05c0a3f40595b6c51ba5f 100644 --- a/src/sip/sipcall.h +++ b/src/sip/sipcall.h @@ -236,9 +236,6 @@ public: // NOT SIP RELATED (good candidates to be moved elsewhere) std::unique_ptr<IceSocket> newIceSocket(unsigned compId); - IceTransport* getIceMediaTransport() const { - return tmpMediaTransport_ ? tmpMediaTransport_.get() : mediaTransport_.get(); - } void deinitRecorder(); @@ -250,6 +247,9 @@ private: NON_COPYABLE(SIPCall); + IceTransport* getIceMediaTransport() const { + return tmpMediaTransport_ ? tmpMediaTransport_.get() : mediaTransport_.get(); + } void setCallMediaLocal(); void waitForIceAndStartMedia(); @@ -339,7 +339,7 @@ private: std::shared_ptr<IceTransport> mediaTransport_; ///< Temporary transport for media. Replace mediaTransport_ when connected with success - std::shared_ptr<IceTransport> tmpMediaTransport_; + std::unique_ptr<IceTransport> tmpMediaTransport_; std::string peerUri_{};