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.

This commit is contained in:
bjovke 2017-06-27 20:29:08 +02:00
parent 69355730a4
commit 9ef34addb8

View File

@ -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)
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