in src/afs.cc [3684:3719]
void sync_sessions()
{
dshash_seq_status sessionsStatus;
dshash_seq_init(&sessionsStatus, sessions_, false);
while (true)
{
auto session =
static_cast<SharedSessionData*>(dshash_seq_next(&sessionsStatus));
if (!session)
{
break;
}
if (DsaPointerIsValid(session->errorMessage))
{
std::lock_guard<std::mutex> lock(mutex_);
auto localSession = localSessions_.find(session->id)->second;
if (localSession)
{
localSession->errorMessage = static_cast<const char*>(
dsa_get_address(area_, session->errorMessage));
}
dsa_free(area_, session->errorMessage);
session->errorMessage = InvalidDsaPointer;
}
if (session->finished)
{
{
std::lock_guard<std::mutex> lock(mutex_);
localSessions_.erase(localSessions_.find(session->id));
}
shared_session_data_finalize(session, area_);
dshash_delete_current(&sessionsStatus);
}
}
dshash_seq_term(&sessionsStatus);
}