void DviService::StopSubscriptions() { iLock.Wait(); for (TUint i=0; i<iSubscriptions.size(); i++) { DviSubscription* subscription = iSubscriptions[i]; subscription->Stop(); iDvStack.SubscriptionManager().RemoveSubscription(*subscription); subscription->RemoveRef(); } iSubscriptions.clear(); iLock.Signal(); }
void DviService::RemoveSubscription(const Brx& aSid) { iLock.Wait(); for (TUint i=0; i<iSubscriptions.size(); i++) { DviSubscription* subscription = iSubscriptions[i]; if (subscription->Sid() == aSid) { DviSubscriptionManager::RemoveSubscription(*subscription); iSubscriptions.erase(iSubscriptions.begin() + i); iLock.Signal(); subscription->RemoveRef(); return; } } iLock.Signal(); }
DviService::~DviService() { iLock.Wait(); TUint i=0; for (; i<iSubscriptions.size(); i++) { DviSubscription* subscription = iSubscriptions[i]; DviSubscriptionManager::RemoveSubscription(*subscription); subscription->RemoveRef(); } for (i=0; i<iDvActions.size(); i++) { delete iDvActions[i].Action(); } for (i=0; i<iProperties.size(); i++) { delete iProperties[i]; } iLock.Signal(); Stack::RemoveObject(this, "DviService"); }
void PropertyWriterFactory::Disable() { Stack::Mutex().Wait(); iEnabled = false; Stack::Mutex().Signal(); iSubscriptionMapLock.Wait(); std::vector<DviSubscription*> subscriptions; SubscriptionMap::iterator it = iSubscriptionMap.begin(); if (it != iSubscriptionMap.end()) { DviSubscription* subscription = it->second; if (subscription->TryAddRef()) { subscriptions.push_back(subscription); } it++; } iSubscriptionMapLock.Signal(); for (TUint i=0; i<(TUint)subscriptions.size(); i++) { DviSubscription* subscription = subscriptions[i]; subscription->Remove(); subscription->RemoveRef(); } RemoveRef(); }