mirror of
https://github.com/RetroShare/RetroShare.git
synced 2025-06-05 13:19:32 -04:00
Reduced locking time of mutex in RsGenExchange::processMsgMetaChanges and RsGenExchange::processGrpMetaChanges.
git-svn-id: http://svn.code.sf.net/p/retroshare/code/trunk@8005 b45a01b8-16f6-495d-af2f-9b41ad6348cc
This commit is contained in:
parent
58430d0a9d
commit
f6a1cbb3b2
1 changed files with 38 additions and 16 deletions
|
@ -1634,14 +1634,22 @@ void RsGenExchange::setMsgServiceString(uint32_t& token, const RsGxsGrpMsgIdPair
|
||||||
|
|
||||||
void RsGenExchange::processMsgMetaChanges()
|
void RsGenExchange::processMsgMetaChanges()
|
||||||
{
|
{
|
||||||
RS_STACK_MUTEX(mGenMtx) ;
|
std::map<uint32_t, MsgLocMetaData> metaMap;
|
||||||
|
|
||||||
|
{
|
||||||
|
RS_STACK_MUTEX(mGenMtx);
|
||||||
|
if (mMsgLocMetaMap.empty())
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
metaMap = mMsgLocMetaMap;
|
||||||
|
mMsgLocMetaMap.clear();
|
||||||
|
}
|
||||||
|
|
||||||
GxsMsgReq msgIds;
|
GxsMsgReq msgIds;
|
||||||
|
|
||||||
std::map<uint32_t, MsgLocMetaData>::iterator mit = mMsgLocMetaMap.begin(),
|
std::map<uint32_t, MsgLocMetaData>::iterator mit;
|
||||||
mit_end = mMsgLocMetaMap.end();
|
for (mit = metaMap.begin(); mit != metaMap.end(); ++mit)
|
||||||
|
|
||||||
for(; mit != mit_end; ++mit)
|
|
||||||
{
|
{
|
||||||
MsgLocMetaData& m = mit->second;
|
MsgLocMetaData& m = mit->second;
|
||||||
|
|
||||||
|
@ -1696,28 +1704,39 @@ void RsGenExchange::processMsgMetaChanges()
|
||||||
{
|
{
|
||||||
mDataAccess->updatePublicRequestStatus(token, RsTokenService::GXS_REQUEST_V2_STATUS_FAILED);
|
mDataAccess->updatePublicRequestStatus(token, RsTokenService::GXS_REQUEST_V2_STATUS_FAILED);
|
||||||
}
|
}
|
||||||
mMsgNotify.insert(std::make_pair(token, m.msgId));
|
|
||||||
|
{
|
||||||
|
RS_STACK_MUTEX(mGenMtx);
|
||||||
|
mMsgNotify.insert(std::make_pair(token, m.msgId));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!msgIds.empty()) {
|
if (!msgIds.empty()) {
|
||||||
|
RS_STACK_MUTEX(mGenMtx);
|
||||||
RsGxsMsgChange* c = new RsGxsMsgChange(RsGxsNotify::TYPE_PROCESSED, true);
|
RsGxsMsgChange* c = new RsGxsMsgChange(RsGxsNotify::TYPE_PROCESSED, true);
|
||||||
c->msgChangeMap = msgIds;
|
c->msgChangeMap = msgIds;
|
||||||
mNotifications.push_back(c);
|
mNotifications.push_back(c);
|
||||||
}
|
}
|
||||||
|
|
||||||
mMsgLocMetaMap.clear();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void RsGenExchange::processGrpMetaChanges()
|
void RsGenExchange::processGrpMetaChanges()
|
||||||
{
|
{
|
||||||
RS_STACK_MUTEX(mGenMtx) ;
|
std::map<uint32_t, GrpLocMetaData > metaMap;
|
||||||
|
|
||||||
|
{
|
||||||
|
RS_STACK_MUTEX(mGenMtx);
|
||||||
|
if (mGrpLocMetaMap.empty())
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
metaMap = mGrpLocMetaMap;
|
||||||
|
mGrpLocMetaMap.clear();
|
||||||
|
}
|
||||||
|
|
||||||
std::list<RsGxsGroupId> grpChanged;
|
std::list<RsGxsGroupId> grpChanged;
|
||||||
|
|
||||||
std::map<uint32_t, GrpLocMetaData>::iterator mit = mGrpLocMetaMap.begin(),
|
std::map<uint32_t, GrpLocMetaData>::iterator mit;
|
||||||
mit_end = mGrpLocMetaMap.end();
|
for (mit = metaMap.begin(); mit != metaMap.end(); ++mit)
|
||||||
|
|
||||||
for(; mit != mit_end; ++mit)
|
|
||||||
{
|
{
|
||||||
GrpLocMetaData& g = mit->second;
|
GrpLocMetaData& g = mit->second;
|
||||||
uint32_t token = mit->first;
|
uint32_t token = mit->first;
|
||||||
|
@ -1735,17 +1754,20 @@ void RsGenExchange::processGrpMetaChanges()
|
||||||
{
|
{
|
||||||
mDataAccess->updatePublicRequestStatus(token, RsTokenService::GXS_REQUEST_V2_STATUS_FAILED);
|
mDataAccess->updatePublicRequestStatus(token, RsTokenService::GXS_REQUEST_V2_STATUS_FAILED);
|
||||||
}
|
}
|
||||||
mGrpNotify.insert(std::make_pair(token, g.grpId));
|
|
||||||
|
{
|
||||||
|
RS_STACK_MUTEX(mGenMtx);
|
||||||
|
mGrpNotify.insert(std::make_pair(token, g.grpId));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if(!grpChanged.empty())
|
if(!grpChanged.empty())
|
||||||
{
|
{
|
||||||
|
RS_STACK_MUTEX(mGenMtx);
|
||||||
RsGxsGroupChange* gc = new RsGxsGroupChange(RsGxsNotify::TYPE_PROCESSED, true);
|
RsGxsGroupChange* gc = new RsGxsGroupChange(RsGxsNotify::TYPE_PROCESSED, true);
|
||||||
gc->mGrpIdList = grpChanged;
|
gc->mGrpIdList = grpChanged;
|
||||||
mNotifications.push_back(gc);
|
mNotifications.push_back(gc);
|
||||||
}
|
}
|
||||||
|
|
||||||
mGrpLocMetaMap.clear();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
bool RsGenExchange::processGrpMask(const RsGxsGroupId& grpId, ContentValue &grpCv)
|
bool RsGenExchange::processGrpMask(const RsGxsGroupId& grpId, ContentValue &grpCv)
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue