From: Automerge script Date: Mon, 27 Aug 2012 14:26:37 +0000 (+0000) Subject: Merged revisions 371691 via svnmerge from X-Git-Tag: 10.9.0-digiumphones-rc1~42 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=b275e7d8b5ea9394116cde1668e5b7edb36681be;p=thirdparty%2Fasterisk.git Merged revisions 371691 via svnmerge from file:///srv/subversion/repos/asterisk/branches/10 ................ r371691 | kmoore | 2012-08-27 08:57:10 -0500 (Mon, 27 Aug 2012) | 14 lines Implement workaround for BETTER_BACKTRACES crash 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) ........ Merged revisions 371690 from http://svn.asterisk.org/svn/asterisk/branches/1.8 ................ git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/10-digiumphones@371717 65c4cc65-6c06-0410-ace0-fbb531ad65f3 --- diff --git a/main/utils.c b/main/utils.c index 07084ce9a0..a679ee15ec 100644 --- a/main/utils.c +++ b/main/utils.c @@ -776,16 +776,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]); }