void process_update_requests()

in src/afs.cc [2800:2857]


	void process_update_requests()
	{
#ifdef AFS_VERBOSE
		const char* tag = "update";
#endif
		std::lock_guard<std::mutex> lock(mutex_);
		for (auto it = updateRequests_.begin(); it != updateRequests_.end();)
		{
			auto& request = *it;
			auto session = static_cast<SharedSessionData*>(
				dshash_find(sessions_, &(request->localSession->id), false));
			if (!session)
			{
				request->finished = true;
				request->localSession->errorMessage =
					std::string("stolen session: ") +
					std::to_string(request->localSession->id);
				it = updateRequests_.erase(it);
				continue;
			}
			if (request->processing)
			{
				SharedSessionReleaser sessionReleaser(sessions_, session);
				if (DsaPointerIsValid(session->errorMessage))
				{
					request->processing = false;
					request->finished = true;
					it = updateRequests_.erase(it);
				}
				else if (session->nUpdatedRecords >= 0)
				{
					request->processing = false;
					request->finished = true;
					request->nUpdatedRecords = session->nUpdatedRecords;
					it = updateRequests_.erase(it);
				}
				else
				{
					++it;
				}
			}
			else
			{
				auto executorPID = session->executorPID;
				{
					SharedSessionReleaser sessionReleaser(sessions_, session);
					ProcessorLockGuard lock(this);
					set_shared_string(session->updateQuery, request->query);
					session->action = Action::Update;
					session->nUpdatedRecords = -1;
				}
				P("%s: %s: %s: kill executor: %d", Tag, tag_, tag, executorPID);
				kill(executorPID, SIGUSR1);
				request->processing = true;
				++it;
			}
		}
	}