arrow::Result read()

in src/afs.cc [3551:3582]


	arrow::Result<size_t> read(LocalSessionData* localSession,
	                           SharedRingBuffer* buffer,
	                           size_t n,
	                           void* output) override
	{
		auto request = std::make_shared<ReadRequest>(localSession, buffer, n, output);
		{
			std::lock_guard<std::mutex> lock(mutex_);
			readRequests_.push_back(request);
		}
		kill(MyProcPid, SIGUSR1);
		{
			std::unique_lock<std::mutex> lock(mutex_);
			conditionVariable_.wait(lock, [&] {
				if (localSession->errorMessage.has_value())
				{
					return true;
				}
				if (INTERRUPTS_PENDING_CONDITION())
				{
					return true;
				}
				return request->finished;
			});
		}
		ARROW_RETURN_NOT_OK(check_local_session_error(localSession));
		if (INTERRUPTS_PENDING_CONDITION())
		{
			return arrow::Status::IOError("interrupted");
		}
		return request->readBytes;
	}