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
Showing
- CHANGES 5 additions, 0 deletionsCHANGES
- include/asterisk/backtrace.h 17 additions, 2 deletionsinclude/asterisk/backtrace.h
- main/astmm.c 4 additions, 4 deletionsmain/astmm.c
- main/backtrace.c 202 additions, 122 deletionsmain/backtrace.c
- main/logger.c 29 additions, 17 deletionsmain/logger.c
- main/utils.c 4 additions, 4 deletionsmain/utils.c
- tests/test_pbx.c 44 additions, 0 deletionstests/test_pbx.c
- utils/ael_main.c 2 additions, 9 deletionsutils/ael_main.c
- utils/check_expr.c 3 additions, 10 deletionsutils/check_expr.c
- utils/conf2ael.c 2 additions, 9 deletionsutils/conf2ael.c
Loading
Please register or sign in to comment