diff --git a/core/AmSessionContainer.cpp b/core/AmSessionContainer.cpp index 6d681b3b..c97ce824 100644 --- a/core/AmSessionContainer.cpp +++ b/core/AmSessionContainer.cpp @@ -207,15 +207,15 @@ void AmSessionContainer::destroySession(AmSession* s) string AmSessionContainer::startSessionUAC(const AmSipRequest& req, string& app_name, const AmArg* session_params) { - unique_ptr session; - try { + unique_ptr session; + session.reset(createSession(req, app_name, session_params)); if (session.get() != 0) { session->dlg->initFromLocalRequest(req); session->setCallgroup(req.from_tag); - + switch(addSession(req.from_tag,session.get())) { case AmSessionContainer::Inserted: @@ -257,6 +257,8 @@ string AmSessionContainer::startSessionUAC(const AmSipRequest& req, string& app_ AmEventDispatcher::instance()->delEventQueue(req.from_tag); throw; } + + session.release(); } } catch(const AmSession::Exception& e){ @@ -272,7 +274,6 @@ string AmSessionContainer::startSessionUAC(const AmSipRequest& req, string& app_ return ""; } - session.release(); return req.from_tag; }