[Asterisk-code-review] astmm.c: Display backtrace with memory show allocations (...asterisk[13])

George Joseph asteriskteam at digium.com
Mon Sep 23 07:20:22 CDT 2019


George Joseph has uploaded this change for review. ( https://gerrit.asterisk.org/c/asterisk/+/12914


Change subject: astmm.c:  Display backtrace with memory show allocations
......................................................................

astmm.c:  Display backtrace with memory show allocations

You can currently capture backtraces of memory allocations but they
only get displayed when you stop asterisk and the atexit hooks
are enabled.  Now, if memory backtrace is on and you issue a
"memory show allocations" CLI command for a specific file, then
a backtrace will show for each allocation that occurred after
you turned "memory backtrace on".  The backtrace display is shown
only when a specific file's allocations are displayed to prevent
a massive CLI dump of every file's allocations.

Change-Id: Ic657afc1fc6ec7205e16eb36a97a611d235a2b4f
---
M main/astmm.c
1 file changed, 17 insertions(+), 6 deletions(-)



  git pull ssh://gerrit.asterisk.org:29418/asterisk refs/changes/14/12914/1

diff --git a/main/astmm.c b/main/astmm.c
index 7dafbac..8435d8d 100644
--- a/main/astmm.c
+++ b/main/astmm.c
@@ -185,7 +185,7 @@
 	ast_free(ptr);
 }
 
-static void print_backtrace(struct ast_bt *bt)
+static void print_backtrace(struct ast_bt *bt, struct ast_cli_args *a)
 {
 	int i = 0;
 	struct ast_vector_string *strings;
@@ -195,9 +195,17 @@
 	}
 
 	if ((strings = ast_bt_get_symbols(bt->addresses, bt->num_frames))) {
-		astmm_log("Memory allocation backtrace:\n");
+		if (a) {
+			ast_cli(a->fd, "Memory allocation backtrace:\n");
+		} else {
+			astmm_log("Memory allocation backtrace:\n");
+		}
 		for (i = 3; i < AST_VECTOR_SIZE(strings) - 2; i++) {
-			astmm_log("#%d: %s\n", i - 3, AST_VECTOR_GET(strings, i));
+			if (a) {
+				ast_cli(a->fd, "#%d: %s\n", i - 3, AST_VECTOR_GET(strings, i));
+			} else {
+				astmm_log("#%d: %s\n", i - 3, AST_VECTOR_GET(strings, i));
+			}
 		}
 		ast_bt_free_symbols(strings);
 	}
@@ -311,7 +319,7 @@
 		if (*pos != FREED_MAGIC) {
 			astmm_log("WARNING: Memory corrupted after free of %p allocated at %s %s() line %d\n",
 				reg->data, reg->file, reg->func, reg->lineno);
-			print_backtrace(reg->bt);
+			print_backtrace(reg->bt, NULL);
 			my_do_crash();
 			break;
 		}
@@ -431,14 +439,14 @@
 	if (*fence != FENCE_MAGIC) {
 		astmm_log("WARNING: Low fence violation of %p allocated at %s %s() line %d\n",
 			reg->data, reg->file, reg->func, reg->lineno);
-		print_backtrace(reg->bt);
+		print_backtrace(reg->bt, NULL);
 		my_do_crash();
 	}
 	fence = (unsigned int *) (reg->data + reg->len);
 	if (get_unaligned_uint32(fence) != FENCE_MAGIC) {
 		astmm_log("WARNING: High fence violation of %p allocated at %s %s() line %d\n",
 			reg->data, reg->file, reg->func, reg->lineno);
-		print_backtrace(reg->bt);
+		print_backtrace(reg->bt, NULL);
 		my_do_crash();
 	}
 }
@@ -882,6 +890,9 @@
 			ast_cli(a->fd, "%10u bytes allocated%s by %20s() line %5u of %s\n",
 				(unsigned int) reg->len, reg->cache ? " (cache)" : "",
 				reg->func, reg->lineno, reg->file);
+			if (reg->bt && !ast_strlen_zero(fn)) {
+				print_backtrace(reg->bt, a);
+			}
 
 			selected_len += reg->len;
 			if (reg->cache) {

-- 
To view, visit https://gerrit.asterisk.org/c/asterisk/+/12914
To unsubscribe, or for help writing mail filters, visit https://gerrit.asterisk.org/settings

Gerrit-Project: asterisk
Gerrit-Branch: 13
Gerrit-Change-Id: Ic657afc1fc6ec7205e16eb36a97a611d235a2b4f
Gerrit-Change-Number: 12914
Gerrit-PatchSet: 1
Gerrit-Owner: George Joseph <gjoseph at digium.com>
Gerrit-MessageType: newchange
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.digium.com/pipermail/asterisk-code-review/attachments/20190923/80000fed/attachment-0001.html>


More information about the asterisk-code-review mailing list