| 2667 | } |
| 2668 | |
| 2669 | static void on_error(ArrowAsyncDeviceStreamHandler* self, int code, const char* message, |
| 2670 | const char* metadata) { |
| 2671 | auto* private_data = reinterpret_cast<PrivateData*>(self->private_data); |
| 2672 | std::string message_str, metadata_str; |
| 2673 | if (message != nullptr) { |
| 2674 | message_str = message; |
| 2675 | } |
| 2676 | if (metadata != nullptr) { |
| 2677 | metadata_str = metadata; |
| 2678 | } |
| 2679 | |
| 2680 | Status error = Status::FromDetailAndArgs( |
| 2681 | StatusCode::UnknownError, |
| 2682 | std::make_shared<AsyncErrorDetail>(code, message_str, std::move(metadata_str)), |
| 2683 | std::move(message_str)); |
| 2684 | |
| 2685 | if (!private_data->fut_iterator_.is_finished()) { |
| 2686 | private_data->fut_iterator_.MarkFinished(error); |
| 2687 | return; |
| 2688 | } |
| 2689 | |
| 2690 | std::unique_lock<std::mutex> lock(private_data->state_->mutex_); |
| 2691 | private_data->state_->error_ = std::move(error); |
| 2692 | lock.unlock(); |
| 2693 | private_data->state_->cv_.notify_one(); |
| 2694 | } |
| 2695 | |
| 2696 | static void release(ArrowAsyncDeviceStreamHandler* self) { |
| 2697 | delete reinterpret_cast<PrivateData*>(self->private_data); |
no test coverage detected