b/f: protect subscriptions list when creating new subscription

sayer/1.4-spce2.6
Stefan Sayer 14 years ago
parent 1becd3cc94
commit 3327473f14

@ -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;
}

Loading…
Cancel
Save