in src/afs.cc [3726:3758]
arrow::Status wait_internal(LocalSessionData* localSession,
SharedRingBuffer* buffer,
WaitMode mode,
const char* tag) override
{
std::unique_lock<std::mutex> lock(mutex_);
conditionVariable_.wait(lock, [&] {
P("%s: %s: %s: %s: wait: %" PRIsize ": error: %s",
Tag,
tag_,
tag,
peer_name(),
get_waiting_buffer_size(buffer, mode),
localSession->errorMessage.has_value()
? localSession->errorMessage.value().c_str()
: "");
if (localSession->errorMessage.has_value())
{
return true;
}
if (INTERRUPTS_PENDING_CONDITION())
{
return true;
}
return get_waiting_buffer_size(buffer, mode) > 0;
});
ARROW_RETURN_NOT_OK(check_local_session_error(localSession, true));
if (INTERRUPTS_PENDING_CONDITION())
{
return arrow::Status::Invalid(tag_, ": ", tag, ": ", "interrupted");
}
return arrow::Status::OK();
}