Skip to content
Snippets Groups Projects
  • George Joseph's avatar
    ece5f801
    backtrace: Refactor ast_bt_get_symbols so it doesn't crash · ece5f801
    George Joseph authored
    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
    ece5f801
    History
    backtrace: Refactor ast_bt_get_symbols so it doesn't crash
    George Joseph authored
    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