THRIFT-2430 Crash during TThreadPoolServer shutdown
Patch: Lars Benner
diff --git a/lib/cpp/src/thrift/transport/TTransportException.cpp b/lib/cpp/src/thrift/transport/TTransportException.cpp
index 2c1f303..2b1430c 100644
--- a/lib/cpp/src/thrift/transport/TTransportException.cpp
+++ b/lib/cpp/src/thrift/transport/TTransportException.cpp
@@ -28,4 +28,23 @@
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 028dbb8..8558837 100644
--- a/lib/cpp/src/thrift/transport/TTransportException.h
+++ b/lib/cpp/src/thrift/transport/TTransportException.h
@@ -83,23 +83,7 @@
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. */