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