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

Reply via email to