bool isAdded = true;
bool isSubscribing = false;
+
+ NSProvider_internal * providerCacheDataFromAddr
+ = NSFindProviderFromAddr(provider->connection->addr);
+ NS_VERIFY_NOT_NULL_WITH_POST_CLEANING_V(
+ (providerCacheDataFromAddr == NULL) ? (void *)1 : NULL,
+ NSRemoveProvider_internal(providerCacheDataFromAddr));
+
NSProvider_internal * providerCacheData = NSProviderCacheFind(provider->providerId);
if (providerCacheData == NULL)
{
NS_VERIFY_NOT_NULL_V(provider);
- NSResult ret = NSProviderCacheUpdate(provider);
- NS_VERIFY_NOT_NULL_V(ret == NS_OK ? (void *) 1 : NULL);
+ NSCacheList * ProviderCache = *(NSGetProviderCacheList());
+
+ NSCacheElement * cacheElement = NSStorageRead(ProviderCache, provider->providerId);
+ NS_VERIFY_NOT_NULL_V(cacheElement);
+ NSProvider_internal * prov = (NSProvider_internal *)cacheElement->data;
+ NSProviderConnectionInfo *infos = prov->connection;
+ while(infos)
+ {
+ infos->isSubscribing = true;
+ infos = infos->next;
+ }
}
void NSConsumerHandleRecvProviderChanged(NSMessage * msg)
{
NS_VERIFY_NOT_NULL_V(provider);
+ NSRemoveConnections(provider->connection);
+ provider->connection = NULL;
+
NSResult ret = NSProviderCacheUpdate(provider);
NS_VERIFY_NOT_NULL_V(ret == NS_OK ? (void *) 1 : NULL);
NSProvider_internal * newProvObj = (NSProvider_internal *) newObj->data;
NSCacheElement * it = NSStorageRead(list, newProvObj->providerId);
+
pthread_mutex_lock(mutex);
if (it)
{
- NSProvider_internal * provObj = (NSProvider_internal *) it->data;
+ if (newProvObj->connection)
+ {
+ NSProvider_internal * provObj = (NSProvider_internal *) it->data;
+
+ NSProviderConnectionInfo * infos = provObj->connection;
+ NSProviderConnectionInfo * lastConn = infos->next;
+ while(lastConn)
+ {
+ infos = lastConn;
+ lastConn = lastConn->next;
+ }
+ infos->next = NSCopyProviderConnections(newProvObj->connection);
+ }
- NSProviderConnectionInfo * infos = provObj->connection;
- NSProviderConnectionInfo * lastConn = infos->next;
- while(lastConn)
+ if (newProvObj->topicLL)
{
- infos = lastConn;
- lastConn = lastConn->next;
+ NSProvider_internal * provObj = (NSProvider_internal *) it->data;
+ NSRemoveTopicLL(provObj->topicLL);
+ provObj->topicLL = NSCopyTopicLL(newProvObj->topicLL);
}
- infos->next = NSCopyProviderConnections(newProvObj->connection);
pthread_mutex_unlock(mutex);