diff --git a/daemon/src/managerimpl.cpp b/daemon/src/managerimpl.cpp index c7ee17c1267bd7ab587ff2d7216b0163f09164e1..3cb9e84d86a0a97d1fd80d1981ec7524fd76c024 100644 --- a/daemon/src/managerimpl.cpp +++ b/daemon/src/managerimpl.cpp @@ -130,6 +130,8 @@ void ManagerImpl::terminate() saveConfig(); + unregisterAllAccounts(); + SIPVoIPLink::destroy(); // Unload account map AFTER destroying // the SIPVoIPLink, the link still needs the accounts for pjsip cleanup @@ -2598,6 +2600,11 @@ namespace { } } + void unregisterAccount(std::pair<const std::string, Account*> &item) + { + item.second->unregisterVoIPLink(); + } + void unloadAccount(std::pair<const std::string, Account*> &item) { // avoid deleting IP2IP account twice @@ -2606,6 +2613,7 @@ namespace { item.second = 0; } } + } // end anonymous namespace void ManagerImpl::loadAccountMap(Conf::YamlParser &parser) @@ -2644,6 +2652,11 @@ void ManagerImpl::loadAccountMap(Conf::YamlParser &parser) std::for_each(seq->begin(), seq->end(), bind(loadAccount, _1, ref(accountMap_))); } +void ManagerImpl::unregisterAllAccounts() +{ + std::for_each(accountMap_.begin(), accountMap_.end(), unregisterAccount); +} + void ManagerImpl::unloadAccountMap() { std::for_each(accountMap_.begin(), accountMap_.end(), unloadAccount); diff --git a/daemon/src/managerimpl.h b/daemon/src/managerimpl.h index 3403d86e2cb24b243e3a8484dfa5ef0985bae328..159d8f9c0d21b45604575a687d762f4b44c1f9e5 100644 --- a/daemon/src/managerimpl.h +++ b/daemon/src/managerimpl.h @@ -969,6 +969,11 @@ class ManagerImpl { *Contains a list of account (sip, aix, etc) and their respective voiplink/calls */ AccountMap accountMap_; + /** + * Unregister all account in accountMap_ + */ + void unregisterAllAccounts(); + /** * Load the account map from configuration */