void PropertyUpdatesFlattened::RemoveSubscription(const Brx& aSid, TBool aExpired)
{
    Brn sid(aSid);
    SubscriptionMap::iterator it = iSubscriptionMap.find(sid);
    if (it != iSubscriptionMap.end()) {
        // remove any pending updates for this subscription too
        UpdatesMap::iterator it2 = iUpdatesMap.find(sid);
        if (it2 != iUpdatesMap.end()) {
            delete it2->second;
            iUpdatesMap.erase(it2);
        }
        DviSubscription* subscription = it->second;
        iSubscriptionMap.erase(it);
        if (!aExpired) {
            subscription->Remove();
        }
    }
}
Exemple #2
0
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();
}