diff options
Diffstat (limited to 'include')
-rw-r--r-- | include/grpc++/impl/codegen/method_handler_impl.h | 10 | ||||
-rw-r--r-- | include/grpc/impl/codegen/port_platform.h | 15 |
2 files changed, 22 insertions, 3 deletions
diff --git a/include/grpc++/impl/codegen/method_handler_impl.h b/include/grpc++/impl/codegen/method_handler_impl.h index b72dceb1b4..41c287231f 100644 --- a/include/grpc++/impl/codegen/method_handler_impl.h +++ b/include/grpc++/impl/codegen/method_handler_impl.h @@ -35,15 +35,19 @@ namespace internal { // so this process doesn't require additional overhead in the common case. // Additionally, we don't need to return if we caught an exception or not; // the handling is the same in either case. -template <class F> -Status CatchingFunctionHandler(F&& callable) { +template <class Callable> +Status CatchingFunctionHandler(Callable&& handler) { +#if GRPC_ALLOW_EXCEPTIONS try { - return callable(); + return handler(); } catch (const std::exception& e) { return Status(StatusCode::UNKNOWN, e.what()); } catch (...) { return Status(StatusCode::UNKNOWN, "Exception in method handler"); } +#else + return handler(); +#endif } /// A wrapper class of an application provided rpc method handler. diff --git a/include/grpc/impl/codegen/port_platform.h b/include/grpc/impl/codegen/port_platform.h index e6bee73ef1..becb16b5b8 100644 --- a/include/grpc/impl/codegen/port_platform.h +++ b/include/grpc/impl/codegen/port_platform.h @@ -477,6 +477,21 @@ typedef unsigned __int64 uint64_t; #endif /* GPR_ATTRIBUTE_NO_TSAN (2) */ #endif /* GPR_ATTRIBUTE_NO_TSAN (1) */ +/* GRPC_ALLOW_EXCEPTIONS should be 0 or 1 if exceptions are allowed or not */ +#ifndef GRPC_ALLOW_EXCEPTIONS +/* If not already set, set to 1 on Windows (style guide standard) but to + * 0 on non-Windows platforms unless the compiler defines __EXCEPTIONS */ +#ifdef GPR_WINDOWS +#define GRPC_ALLOW_EXCEPTIONS 1 +#else +#ifdef __EXCEPTIONS +#define GRPC_ALLOW_EXCEPTIONS 1 +#else +#define GRPC_ALLOW_EXCEPTIONS 0 +#endif +#endif +#endif + #ifndef __STDC_FORMAT_MACROS #define __STDC_FORMAT_MACROS #endif |