networkTimeOutHandle = 0;
pollingHandle = 0;
+ lastSequenceNum = 0;
}
DataCache::~DataCache()
const HeaderOptions &_hos, const ResponseStatement &_rep, int _result, int _seq)
{
- if (_result != OC_STACK_OK || _rep.getAttributes().empty())
+ if (_result != OC_STACK_OK || _rep.getAttributes().empty() || lastSequenceNum > _seq)
{
return;
}
+ else
+ {
+ lastSequenceNum = _seq;
+ }
if (state != CACHE_STATE::READY)
{
{
ResourceCacheManager *ResourceCacheManager::s_instance = NULL;
std::mutex ResourceCacheManager::s_mutexForCreation;
+ std::mutex ResourceCacheManager::s_mutex;
std::unique_ptr<std::list<DataCachePtr>> ResourceCacheManager::s_cacheDataList(nullptr);
ResourceCacheManager::~ResourceCacheManager()
{
+ std::lock_guard<std::mutex> lock(s_mutex);
if (s_cacheDataList != nullptr)
{
s_cacheDataList->clear();
DataCachePtr newHandler = findDataCache(pResource);
if (newHandler == nullptr)
{
+ std::lock_guard<std::mutex> lock(s_mutex);
newHandler.reset(new DataCache());
newHandler->initializeDataCache(pResource);
s_cacheDataList->push_back(newHandler);
{
cacheIDmap.erase(id);
}
+ std::lock_guard<std::mutex> lock(s_mutex);
if (foundCacheHandler->isEmptySubscriber())
{
s_cacheDataList->remove(foundCacheHandler);
}
foundCache->requestGet();
}
+
void ResourceCacheManager::updateResourceCache(CacheID updateId) const
{
if (updateId == 0)
void ResourceCacheManager::initializeResourceCacheManager()
{
+ std::lock_guard<std::mutex> lock(s_mutex);
if (s_cacheDataList == nullptr)
{
s_cacheDataList
DataCachePtr ResourceCacheManager::findDataCache(PrimitiveResourcePtr pResource) const
{
DataCachePtr retHandler = nullptr;
+ std::lock_guard<std::mutex> lock(s_mutex);
for (auto &i : * s_cacheDataList)
{
if (i->getPrimitiveResource()->getUri() == pResource->getUri() &&