diff --git a/include/grpcpp/impl/server_callback_handlers.h b/include/grpcpp/impl/server_callback_handlers.h index 9dad476e6b6..b49e17a2c16 100644 --- a/include/grpcpp/impl/server_callback_handlers.h +++ b/include/grpcpp/impl/server_callback_handlers.h @@ -187,9 +187,7 @@ class CallbackUnaryHandler : public grpc::internal::MethodHandler { ctx_->set_message_allocator_state(allocator_state); } - void RunAsync(absl::AnyInvocable cb) override { - grpc_call_run_in_event_engine(call_.call(), std::move(cb)); - } + grpc_call* call() override { return call_.call(); } /// SetupReactor binds the reactor (which also releases any queued /// operations), maybe calls OnCancel if possible/needed, and maybe marks @@ -375,9 +373,7 @@ class CallbackClientStreamingHandler : public grpc::internal::MethodHandler { std::function call_requester) : ctx_(ctx), call_(*call), call_requester_(std::move(call_requester)) {} - void RunAsync(absl::AnyInvocable cb) override { - grpc_call_run_in_event_engine(call_.call(), std::move(cb)); - } + grpc_call* call() override { return call_.call(); } void SetupReactor(ServerReadReactor* reactor) { reactor_.store(reactor, std::memory_order_relaxed); @@ -604,9 +600,7 @@ class CallbackServerStreamingHandler : public grpc::internal::MethodHandler { req_(req), call_requester_(std::move(call_requester)) {} - void RunAsync(absl::AnyInvocable cb) override { - grpc_call_run_in_event_engine(call_.call(), std::move(cb)); - } + grpc_call* call() override { return call_.call(); } void SetupReactor(ServerWriteReactor* reactor) { reactor_.store(reactor, std::memory_order_relaxed); @@ -820,9 +814,7 @@ class CallbackBidiHandler : public grpc::internal::MethodHandler { std::function call_requester) : ctx_(ctx), call_(*call), call_requester_(std::move(call_requester)) {} - void RunAsync(absl::AnyInvocable cb) override { - grpc_call_run_in_event_engine(call_.call(), std::move(cb)); - } + grpc_call* call() override { return call_.call(); } void SetupReactor(ServerBidiReactor* reactor) { reactor_.store(reactor, std::memory_order_relaxed); diff --git a/include/grpcpp/server_context.h b/include/grpcpp/server_context.h index c2462718fe7..d860be16095 100644 --- a/include/grpcpp/server_context.h +++ b/include/grpcpp/server_context.h @@ -540,9 +540,8 @@ class ServerContextBase { private: void CallOnDone() override {} - void RunAsync(absl::AnyInvocable cb) override { - grpc_call_run_in_event_engine(call_, std::move(cb)); - } + + grpc_call* call() override { return call_; } grpc::internal::ServerReactor* reactor() override { return reactor_; } diff --git a/include/grpcpp/support/server_callback.h b/include/grpcpp/support/server_callback.h index 6d248a1871e..e5fd910701a 100644 --- a/include/grpcpp/support/server_callback.h +++ b/include/grpcpp/support/server_callback.h @@ -25,6 +25,7 @@ #include "absl/functional/any_invocable.h" +#include #include #include #include @@ -128,7 +129,12 @@ class ServerCallbackCall { private: virtual ServerReactor* reactor() = 0; - virtual void RunAsync(absl::AnyInvocable cb) = 0; + + virtual grpc_call* call() = 0; + + virtual void RunAsync(absl::AnyInvocable cb) { + grpc_call_run_in_event_engine(call(), std::move(cb)); + } // CallOnDone performs the work required at completion of the RPC: invoking // the OnDone function and doing all necessary cleanup. This function is only