Commit 9ef34add authored by bjovke's avatar bjovke

Problem: When using print_backtrace() on Linux with libunwind, printout of stack…

Problem: When using print_backtrace() on Linux with libunwind, printout of stack traces from multiple threads are interleaved. Solution: added static mutex to serialize printing of stack traces.
parent 69355730
...@@ -389,9 +389,12 @@ int zmq::wsa_error_to_errno (int errcode) ...@@ -389,9 +389,12 @@ int zmq::wsa_error_to_errno (int errcode)
#include <libunwind.h> #include <libunwind.h>
#include <dlfcn.h> #include <dlfcn.h>
#include <cxxabi.h> #include <cxxabi.h>
#include "mutex.hpp"
void zmq::print_backtrace (void) void zmq::print_backtrace (void)
{ {
static zmq::mutex_t mtx;
mtx.lock ();
Dl_info dl_info; Dl_info dl_info;
unw_cursor_t cursor; unw_cursor_t cursor;
unw_context_t ctx; unw_context_t ctx;
...@@ -429,8 +432,10 @@ void zmq::print_backtrace (void) ...@@ -429,8 +432,10 @@ void zmq::print_backtrace (void)
rc ? func_name : demangled_name, (unsigned long) offset); rc ? func_name : demangled_name, (unsigned long) offset);
free (demangled_name); free (demangled_name);
} }
puts ("");
fflush (stdout); fflush (stdout);
mtx.unlock ();
} }
#else #else
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment