void sync_sessions()

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);
	}