Module: sems Branch: master Commit: de1465a5d21638754b90cfa711979315d58cb270 URL: http://git.sip-router.org/cgi-bin/gitweb.cgi/sems/?a=commit;h=de1465a5d21638754b90cfa711979315d58cb270
Author: Stefan Sayer <[email protected]> Committer: Stefan Sayer <[email protected]> Date: Tue Apr 17 18:21:05 2012 +0200 b/f: protect subscriptions list when creating new subscription --- core/AmSipSubscriptionContainer.cpp | 16 ++++++++++++---- 1 files changed, 12 insertions(+), 4 deletions(-) diff --git a/core/AmSipSubscriptionContainer.cpp b/core/AmSipSubscriptionContainer.cpp index 917201c..cd60aac 100644 --- a/core/AmSipSubscriptionContainer.cpp +++ b/core/AmSipSubscriptionContainer.cpp @@ -52,16 +52,24 @@ string _AmSipSubscriptionContainer::createSubscription(const AmSipSubscriptionIn unsigned int wanted_expires) { initialize(); string handle = AmSession::getNewId(); - subscriptions[handle] = new AmSipSubscription(handle, info, sess_link); - subscriptions[handle]->setExpiresInterval(wanted_expires); + AmSipSubscription* new_sub = new AmSipSubscription(handle, info, sess_link); + new_sub->setExpiresInterval(wanted_expires); + + subscriptions_mut.lock(); + subscriptions[handle] = new_sub; + subscriptions_mut.unlock(); + AmEventDispatcher::instance()->addEventQueue(handle, this); - if (!subscriptions[handle]->doSubscribe()) { + if (!new_sub->doSubscribe()) { DBG("subscribe failed - removing subscription\b"); AmEventDispatcher::instance()->delEventQueue(handle); - delete subscriptions[handle]; + subscriptions_mut.lock(); subscriptions.erase(handle); + subscriptions_mut.unlock(); + delete new_sub; return ""; } + return handle; } _______________________________________________ Semsdev mailing list [email protected] http://lists.iptel.org/mailman/listinfo/semsdev
