backtrace: Refactor ast_bt_get_symbols so it doesn't crash
authorGeorge Joseph <gjoseph@digium.com>
Thu, 8 Nov 2018 15:53:44 +0000 (08:53 -0700)
committerGeorge Joseph <gjoseph@digium.com>
Mon, 19 Nov 2018 12:49:39 +0000 (05:49 -0700)
commitece5f8015f1805412749021721b13d1e779076e3
treeae36365cb8d2572ec1f2094d848038305117703f
parentfa048183aa618860138de41e3d7ded839dd6ecbb
backtrace:  Refactor ast_bt_get_symbols so it doesn't crash

We've been seeing crashes in libbfd when we attempt to generate
a stack trace from multiple threads.  It turns out that libbfd
is NOT thread-safe.  It can cache the bfd structure and give it to
multiple threads without protecting itself.  To get around this,
we've added a global mutex around the bfd functions and also have
refactored the use of those functions to be more efficient and
to provide more information about inlined functions.

Also added a few more tests to test_pbx.c.  One just calls
ast_assert() and the other calls ast_log_backtrace().  Neither are
run by default.

WARNING:  This change necessitated changing the return value of
ast_bt_get_symbols() from an array of strings to a VECTOR of
strings.  However, the use of this function outside Asterisk is not
likely.

ASTERISK-28140

Change-Id: I79d02862ddaa2423a0809caa4b3b85c128131621
CHANGES
include/asterisk/backtrace.h
main/astmm.c
main/backtrace.c
main/logger.c
main/utils.c
tests/test_pbx.c
utils/ael_main.c
utils/check_expr.c
utils/conf2ael.c