]> git.ipfire.org Git - thirdparty/asterisk.git/commitdiff
Implement workaround for BETTER_BACKTRACES crash
authorKinsey Moore <kmoore@digium.com>
Mon, 27 Aug 2012 13:43:23 +0000 (13:43 +0000)
committerKinsey Moore <kmoore@digium.com>
Mon, 27 Aug 2012 13:43:23 +0000 (13:43 +0000)
When compiling with BETTER_BACKTRACES enabled, Asterisk will sometimes
crash when "core show locks" is run. This happens regularly in the
testsuite since several tests run "core show locks" to help with
debugging. This seems to be a fault with libraries on certain operating
systems (notably CentOS 6.2/6.3) running on virtual machines and
utilizing gcc 4.4.6.

(closes issue ASTERISK-20090)

git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.8@371690 65c4cc65-6c06-0410-ace0-fbb531ad65f3

main/utils.c

index bda770c2145719a7fa0c0a03a25cf5c33a326c56..898f9d1017ab7df9f431ffa49d11c2608b3e5f74 100644 (file)
@@ -770,16 +770,20 @@ static const char *locktype2str(enum ast_lock_type type)
 static void append_backtrace_information(struct ast_str **str, struct ast_bt *bt)
 {
        char **symbols;
+       int num_frames;
 
        if (!bt) {
                ast_str_append(str, 0, "\tNo backtrace to print\n");
                return;
        }
 
-       if ((symbols = ast_bt_get_symbols(bt->addresses, bt->num_frames))) {
+       /* store frame count locally to avoid the memory corruption that
+        * sometimes happens on virtualized CentOS 6.x systems */
+       num_frames = bt->num_frames;
+       if ((symbols = ast_bt_get_symbols(bt->addresses, num_frames))) {
                int frame_iterator;
                
-               for (frame_iterator = 0; frame_iterator < bt->num_frames; ++frame_iterator) {
+               for (frame_iterator = 0; frame_iterator < num_frames; ++frame_iterator) {
                        ast_str_append(str, 0, "\t%s\n", symbols[frame_iterator]);
                }