diff --git a/libretroshare/src/gxs/rsdataservice.cc b/libretroshare/src/gxs/rsdataservice.cc index b8eadb55d..d6038f7e7 100644 --- a/libretroshare/src/gxs/rsdataservice.cc +++ b/libretroshare/src/gxs/rsdataservice.cc @@ -883,6 +883,8 @@ int RsDataService::storeGroup(std::map &grp) cv.put(KEY_GRP_STATUS, (int32_t)grpMetaPtr->mGroupStatus); cv.put(KEY_GRP_LAST_POST, (int32_t)grpMetaPtr->mLastPost); + locked_clearGrpMetaCache(grpMetaPtr->mGroupId); + if (!mDb->sqlInsert(GRP_TABLE_NAME, "", cv)) { std::cerr << "RsDataService::storeGroup() sqlInsert Failed"; @@ -906,6 +908,12 @@ int RsDataService::storeGroup(std::map &grp) return ret; } +void RsDataService::locked_clearGrpMetaCache(const RsGxsGroupId& gid) +{ + mGrpMetaDataCache.erase(gid) ; // cleans existing cache entry + mGrpMetaDataCache_ContainsAllDatabase = false; +} + int RsDataService::updateGroup(std::map &grp) { @@ -973,6 +981,8 @@ int RsDataService::updateGroup(std::map &grp) cv.put(KEY_GRP_LAST_POST, (int32_t)grpMetaPtr->mLastPost); mDb->sqlUpdate(GRP_TABLE_NAME, "grpId='" + grpPtr->grpId.toStdString() + "'", cv); + + locked_clearGrpMetaCache(grpMetaPtr->mGroupId); } // finish transaction bool ret = mDb->commitTransaction(); @@ -1453,8 +1463,7 @@ int RsDataService::updateGroupMetaData(GrpLocMetaData &meta) std::cerr << (void*)this << ": erasing old entry from cache." << std::endl; #endif - mGrpMetaDataCache_ContainsAllDatabase = false ; - mGrpMetaDataCache.erase(meta.grpId) ; + locked_clearGrpMetaCache(meta.grpId); return mDb->sqlUpdate(GRP_TABLE_NAME, KEY_GRP_ID+ "='" + grpId.toStdString() + "'", meta.val) ? 1 : 0; } diff --git a/libretroshare/src/gxs/rsdataservice.h b/libretroshare/src/gxs/rsdataservice.h index 451d630cc..a48da407f 100644 --- a/libretroshare/src/gxs/rsdataservice.h +++ b/libretroshare/src/gxs/rsdataservice.h @@ -345,6 +345,8 @@ private: // The boolean variable below is also used to force re-reading when // the entre list of grp metadata is requested (which happens quite often) + void locked_clearGrpMetaCache(const RsGxsGroupId& gid); + std::map mGrpMetaDataCache ; bool mGrpMetaDataCache_ContainsAllDatabase ; };