| 48 | } |
| 49 | |
| 50 | void AddCallback(Callback callback, CallbackOptions opts) { |
| 51 | CheckOptions(opts); |
| 52 | std::unique_lock<std::mutex> lock(mutex_); |
| 53 | #ifdef ARROW_WITH_OPENTELEMETRY |
| 54 | callback = [func = std::move(callback), |
| 55 | active_span = ::arrow::internal::tracing::GetTracer()->GetCurrentSpan()]( |
| 56 | const FutureImpl& impl) mutable { |
| 57 | auto scope = ::arrow::internal::tracing::GetTracer()->WithActiveSpan(active_span); |
| 58 | std::move(func)(impl); |
| 59 | }; |
| 60 | #endif |
| 61 | CallbackRecord callback_record{std::move(callback), opts}; |
| 62 | if (IsFutureFinished(state_)) { |
| 63 | lock.unlock(); |
| 64 | RunOrScheduleCallback(shared_from_this(), std::move(callback_record), |
| 65 | /*in_add_callback=*/true); |
| 66 | } else { |
| 67 | callbacks_.push_back(std::move(callback_record)); |
| 68 | } |
| 69 | } |
| 70 | |
| 71 | bool TryAddCallback(const std::function<Callback()>& callback_factory, |
| 72 | CallbackOptions opts) { |
nothing calls this directly
no test coverage detected