mirror of
https://github.com/ClickHouse/ClickHouse.git
synced 2024-11-30 03:22:14 +00:00
Merge
This commit is contained in:
commit
77f2e60146
@ -52,7 +52,7 @@ private:
|
|||||||
char * c_end;
|
char * c_end;
|
||||||
char * c_end_of_storage;
|
char * c_end_of_storage;
|
||||||
|
|
||||||
bool use_libc_realloc;
|
bool use_libc_realloc = false;
|
||||||
|
|
||||||
T * t_start() { return reinterpret_cast<T *>(c_start); }
|
T * t_start() { return reinterpret_cast<T *>(c_start); }
|
||||||
T * t_end() { return reinterpret_cast<T *>(c_end); }
|
T * t_end() { return reinterpret_cast<T *>(c_end); }
|
||||||
@ -175,10 +175,10 @@ public:
|
|||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
PODArray() : use_libc_realloc(false) { alloc(0); }
|
PODArray() { alloc(0); }
|
||||||
PODArray(size_t n) : use_libc_realloc(false) { alloc(n); c_end += byte_size(n); }
|
PODArray(size_t n) { alloc(n); c_end += byte_size(n); }
|
||||||
PODArray(size_t n, const T & x) : use_libc_realloc(false) { alloc(n); assign(n, x); }
|
PODArray(size_t n, const T & x) { alloc(n); assign(n, x); }
|
||||||
PODArray(const_iterator from_begin, const_iterator from_end) : use_libc_realloc(false) { alloc(from_end - from_begin); insert(from_begin, from_end); }
|
PODArray(const_iterator from_begin, const_iterator from_end) { alloc(from_end - from_begin); insert(from_begin, from_end); }
|
||||||
~PODArray() { dealloc(); }
|
~PODArray() { dealloc(); }
|
||||||
|
|
||||||
PODArray(PODArray && other) { *this = std::move(other); }
|
PODArray(PODArray && other) { *this = std::move(other); }
|
||||||
|
@ -43,6 +43,14 @@ ExceptionPtr cloneCurrentException()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
inline std::string demangle(const char * const mangled, int & status)
|
||||||
|
{
|
||||||
|
const auto demangled_str = abi::__cxa_demangle(mangled, 0, 0, &status);
|
||||||
|
std::string demangled{demangled_str};
|
||||||
|
free(demangled_str);
|
||||||
|
|
||||||
|
return demangled;
|
||||||
|
}
|
||||||
|
|
||||||
void tryLogCurrentException(const char * log_name)
|
void tryLogCurrentException(const char * log_name)
|
||||||
{
|
{
|
||||||
@ -72,10 +80,8 @@ void tryLogCurrentException(const char * log_name)
|
|||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
int status;
|
int status = 0;
|
||||||
char * realname = abi::__cxa_demangle(typeid(e).name(), 0, 0, &status);
|
auto name = demangle(typeid(e).name(), status);
|
||||||
std::string name = realname;
|
|
||||||
free(realname);
|
|
||||||
|
|
||||||
if (status)
|
if (status)
|
||||||
name += " (demangling status: " + toString(status) + ")";
|
name += " (demangling status: " + toString(status) + ")";
|
||||||
@ -88,7 +94,13 @@ void tryLogCurrentException(const char * log_name)
|
|||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
LOG_ERROR(&Logger::get(log_name), "Unknown exception. Code: " << ErrorCodes::UNKNOWN_EXCEPTION);
|
int status = 0;
|
||||||
|
auto name = demangle(abi::__cxa_current_exception_type()->name(), status);
|
||||||
|
|
||||||
|
if (status)
|
||||||
|
name += " (demangling status: " + toString(status) + ")";
|
||||||
|
|
||||||
|
LOG_ERROR(&Logger::get(log_name), "Unknown exception. Code: " << ErrorCodes::UNKNOWN_EXCEPTION << ", type: " << name);
|
||||||
}
|
}
|
||||||
catch (...) {}
|
catch (...) {}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user