Index: utils.c =================================================================== --- utils.c (revision 353316) +++ utils.c (working copy) @@ -736,10 +736,16 @@ return; } - if ((symbols = backtrace_symbols(bt->addresses, bt->num_frames))) { + /* There is no locking so the backtrace buffer can be filling as we + are working. Make sure we use the same frame count for everything + as outputting more frames than we have formatted can produce a + crash. A reduction should just produce garbled addresses. */ + int num_frames_snapshot = bt->num_frames; + + if ((symbols = backtrace_symbols(bt->addresses, num_frames_snapshot))) { int frame_iterator; - for (frame_iterator = 0; frame_iterator < bt->num_frames; ++frame_iterator) { + for (frame_iterator = 0; frame_iterator < num_frames_snapshot; ++frame_iterator) { ast_str_append(str, 0, "\t%s\n", symbols[frame_iterator]); }