diff --git a/include/libtorrent/assert.hpp b/include/libtorrent/assert.hpp index c4fffb855..460c35d33 100644 --- a/include/libtorrent/assert.hpp +++ b/include/libtorrent/assert.hpp @@ -47,7 +47,7 @@ extern char const* libtorrent_assert_log; #include std::string demangle(char const* name); -void print_backtrace(char* out, int len); +void print_backtrace(char* out, int len, int max_depth = 0); #if (defined __linux__ || defined __MACH__) && defined __GNUC__ && !TORRENT_USE_SYSTEM_ASSERT diff --git a/include/libtorrent/debug.hpp b/include/libtorrent/debug.hpp index 7eec8f80b..2ca1a4af3 100644 --- a/include/libtorrent/debug.hpp +++ b/include/libtorrent/debug.hpp @@ -62,7 +62,7 @@ namespace libtorrent if (a.stack.empty()) { char stack_text[10000]; - print_backtrace(stack_text, sizeof(stack_text)); + print_backtrace(stack_text, sizeof(stack_text), 9); a.stack = stack_text; } ++a.refs; diff --git a/src/assert.cpp b/src/assert.cpp index f8d6a6657..e32926cf3 100644 --- a/src/assert.cpp +++ b/src/assert.cpp @@ -114,7 +114,7 @@ std::string demangle(char const* name) { return name; } #if (defined __linux__ || (defined __APPLE__ && MAC_OS_X_VERSION_MIN_REQUIRED >= 1050)) #include -void print_backtrace(char* out, int len) +void print_backtrace(char* out, int len, int max_depth) { void* stack[50]; int size = backtrace(stack, 50); @@ -125,6 +125,7 @@ void print_backtrace(char* out, int len) int ret = snprintf(out, len, "%d: %s\n", i, demangle(symbols[i]).c_str()); out += ret; len -= ret; + if (i - 1 == max_depth && max_depth > 0) break; } free(symbols); @@ -141,7 +142,7 @@ void print_backtrace(char* out, int len) #include "winbase.h" #include "dbghelp.h" -void print_backtrace(char* out, int len) +void print_backtrace(char* out, int len, int max_depth) { typedef USHORT (*RtlCaptureStackBackTrace_t)( __in ULONG FramesToSkip, @@ -188,13 +189,14 @@ void print_backtrace(char* out, int len) out += ret; len -= ret; + if (i == max_depth && max_depth > 0) break; } free(symbol); } #else -void print_backtrace(char* out, int len) {} +void print_backtrace(char* out, int len, int max_depth) {} #endif @@ -213,7 +215,7 @@ TORRENT_EXPORT void assert_fail(char const* expr, int line, char const* file #endif char stack[8192]; - print_backtrace(stack, sizeof(stack)); + print_backtrace(stack, sizeof(stack), 0); fprintf(out, "assertion failed. Please file a bugreport at " "http://code.rasterbar.com/libtorrent/newticket\n" diff --git a/src/session_impl.cpp b/src/session_impl.cpp index 906f4d1f1..2374966dd 100644 --- a/src/session_impl.cpp +++ b/src/session_impl.cpp @@ -5502,7 +5502,7 @@ namespace aux { { sleep(1000); ++counter; - printf("\n==== Waiting to shut down: %d ==== \n\n", counter); + printf("\n==== Waiting to shut down: %d ==== conn-queue: %d\n\n", counter, m_half_open.size()); } async_dec_threads(); #endif