From ea6076f1750fecf2f2bd0a9fa4747f916588427b Mon Sep 17 00:00:00 2001 From: Jens Geyer Date: Fri, 28 Mar 2014 22:45:27 +0200 Subject: [PATCH] THRIFT-2430 Crash during TThreadPoolServer shutdown Patch: Lars Benner --- .../thrift/transport/TTransportException.cpp | 19 +++++++++++++++++++ .../thrift/transport/TTransportException.h | 18 +----------------- 2 files changed, 20 insertions(+), 17 deletions(-) diff --git a/lib/cpp/src/thrift/transport/TTransportException.cpp b/lib/cpp/src/thrift/transport/TTransportException.cpp index 2c1f3032..2b1430c2 100644 --- a/lib/cpp/src/thrift/transport/TTransportException.cpp +++ b/lib/cpp/src/thrift/transport/TTransportException.cpp @@ -28,4 +28,23 @@ using boost::lexical_cast; namespace apache { namespace thrift { namespace transport { + const char* TTransportException::what() const throw() { + if (message_.empty()) { + switch (type_) { + case UNKNOWN : return "TTransportException: Unknown transport exception"; + case NOT_OPEN : return "TTransportException: Transport not open"; + case TIMED_OUT : return "TTransportException: Timed out"; + case END_OF_FILE : return "TTransportException: End of file"; + case INTERRUPTED : return "TTransportException: Interrupted"; + case BAD_ARGS : return "TTransportException: Invalid arguments"; + case CORRUPTED_DATA : return "TTransportException: Corrupted Data"; + case INTERNAL_ERROR : return "TTransportException: Internal error"; + default : return "TTransportException: (Invalid exception type)"; + } + } else { + return message_.c_str(); + } + } + + }}} // apache::thrift::transport diff --git a/lib/cpp/src/thrift/transport/TTransportException.h b/lib/cpp/src/thrift/transport/TTransportException.h index 028dbb87..85588371 100644 --- a/lib/cpp/src/thrift/transport/TTransportException.h +++ b/lib/cpp/src/thrift/transport/TTransportException.h @@ -83,23 +83,7 @@ class TTransportException : public apache::thrift::TException { return type_; } - virtual const char* what() const throw() { - if (message_.empty()) { - switch (type_) { - case UNKNOWN : return "TTransportException: Unknown transport exception"; - case NOT_OPEN : return "TTransportException: Transport not open"; - case TIMED_OUT : return "TTransportException: Timed out"; - case END_OF_FILE : return "TTransportException: End of file"; - case INTERRUPTED : return "TTransportException: Interrupted"; - case BAD_ARGS : return "TTransportException: Invalid arguments"; - case CORRUPTED_DATA : return "TTransportException: Corrupted Data"; - case INTERNAL_ERROR : return "TTransportException: Internal error"; - default : return "TTransportException: (Invalid exception type)"; - } - } else { - return message_.c_str(); - } - } + virtual const char* what() const throw(); protected: /** Just like strerror_r but returns a C++ string object. */ -- 2.17.1