From 7fa9d6f4c83766f9efc7a187527ee3ac242ea842 Mon Sep 17 00:00:00 2001 From: Sree Kuchibhotla Date: Thu, 28 Jan 2016 17:32:48 -0800 Subject: [PATCH] TryCancel() on ServerContext() --- include/grpc++/impl/codegen/server_context.h | 3 +++ src/cpp/server/server_context.cc | 16 ++++++++++++---- 2 files changed, 15 insertions(+), 4 deletions(-) diff --git a/include/grpc++/impl/codegen/server_context.h b/include/grpc++/impl/codegen/server_context.h index 2af9fdaa34d..868b02882d7 100644 --- a/include/grpc++/impl/codegen/server_context.h +++ b/include/grpc++/impl/codegen/server_context.h @@ -105,6 +105,9 @@ class ServerContext { bool IsCancelled() const; + // Best-effort API to cancel the call from the server. + void TryCancel() const; + const std::multimap& client_metadata() { return client_metadata_; } diff --git a/src/cpp/server/server_context.cc b/src/cpp/server/server_context.cc index 3732c1f090c..4a5ac5af926 100644 --- a/src/cpp/server/server_context.cc +++ b/src/cpp/server/server_context.cc @@ -33,14 +33,14 @@ #include -#include -#include -#include -#include #include #include #include #include +#include +#include +#include +#include #include "src/core/channel/compress_filter.h" #include "src/cpp/common/create_auth_context.h" @@ -173,6 +173,14 @@ void ServerContext::AddTrailingMetadata(const grpc::string& key, trailing_metadata_.insert(std::make_pair(key, value)); } +void ServerContext::TryCancel() const { + grpc_call_error err = grpc_call_cancel_with_status( + call_, GRPC_STATUS_CANCELLED, "Cancelled on the server side", NULL); + if (err != GRPC_CALL_OK) { + gpr_log(GPR_INFO, "TryCancel failed with: %d", err); + } +} + bool ServerContext::IsCancelled() const { return completion_op_ && completion_op_->CheckCancelled(cq_); }