Skip to content
Snippets Groups Projects
Commit 47a54cbb authored by Adrien Béraud's avatar Adrien Béraud
Browse files

siptransport: early shutdown for transport

give transports more time to be destroyed by pjsip

Refs #63196

Change-Id: I065e9e86fc2b3d5bc42f6e7797b1168e7cf00cd4
parent 2ac3fdc3
No related branches found
No related tags found
No related merge requests found
...@@ -269,6 +269,17 @@ SipTransportBroker::findTransport(pjsip_transport* t) ...@@ -269,6 +269,17 @@ SipTransportBroker::findTransport(pjsip_transport* t)
} }
} }
void
SipTransportBroker::shutdown()
{
std::unique_lock<std::mutex> lock(transportMapMutex_);
for (auto& t : transports_) {
if (auto transport = t.second.lock()) {
pjsip_transport_shutdown(transport->get());
}
}
}
void void
SipTransportBroker::waitForReleased(const SipTransportDescr& tp, std::function<void(bool)> released_cb) SipTransportBroker::waitForReleased(const SipTransportDescr& tp, std::function<void(bool)> released_cb)
{ {
......
...@@ -198,6 +198,11 @@ public: ...@@ -198,6 +198,11 @@ public:
*/ */
void waitForReleased(const SipTransportDescr& tp, std::function<void(bool)> released_cb); void waitForReleased(const SipTransportDescr& tp, std::function<void(bool)> released_cb);
/**
* Start gracefull shutdown procedure for all transports
*/
void shutdown();
private: private:
NON_COPYABLE(SipTransportBroker); NON_COPYABLE(SipTransportBroker);
......
...@@ -627,11 +627,11 @@ SIPVoIPLink::~SIPVoIPLink() ...@@ -627,11 +627,11 @@ SIPVoIPLink::~SIPVoIPLink()
const int MAX_TIMEOUT_ON_LEAVING = 5; const int MAX_TIMEOUT_ON_LEAVING = 5;
sipTransport->shutdown();
for (int timeout = 0; pjsip_tsx_layer_get_tsx_count() and timeout < MAX_TIMEOUT_ON_LEAVING; timeout++) for (int timeout = 0; pjsip_tsx_layer_get_tsx_count() and timeout < MAX_TIMEOUT_ON_LEAVING; timeout++)
sleep(1); sleep(1);
Manager::instance().unregisterEventHandler((uintptr_t)this);
const pj_time_val tv = {0, 10}; const pj_time_val tv = {0, 10};
pjsip_endpt_handle_events(endpt_, &tv); pjsip_endpt_handle_events(endpt_, &tv);
...@@ -639,11 +639,12 @@ SIPVoIPLink::~SIPVoIPLink() ...@@ -639,11 +639,12 @@ SIPVoIPLink::~SIPVoIPLink()
RING_ERR("%d SIP calls remains!", RING_ERR("%d SIP calls remains!",
Manager::instance().callFactory.callCount<SIPCall>()); Manager::instance().callFactory.callCount<SIPCall>());
pjsip_endpt_destroy(endpt_); // destroy SIP transport before endpoint
// destroy SIP transport after endpoint
sipTransport.reset(); sipTransport.reset();
Manager::instance().unregisterEventHandler((uintptr_t)this);
pjsip_endpt_destroy(endpt_);
pj_pool_release(pool_); pj_pool_release(pool_);
pj_caching_pool_destroy(cp_); pj_caching_pool_destroy(cp_);
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment