diff options
author | unknown <monty@hundin.mysql.fi> | 2002-01-30 16:37:47 +0200 |
---|---|---|
committer | unknown <monty@hundin.mysql.fi> | 2002-01-30 16:37:47 +0200 |
commit | 85278245af45fc301dc7940bec9a3434003285a6 (patch) | |
tree | 3ca7f6fddbb9bdc0b635f243af69c6606924c3c2 /innobase/mem/mem0dbg.c | |
parent | 9369764f2226e0e8cb9724bcdac256f45330ba67 (diff) | |
parent | 8a56717c4ce14aa7e36e04a8dc880dcc1311ea28 (diff) | |
download | mariadb-git-85278245af45fc301dc7940bec9a3434003285a6.tar.gz |
Merge from 3.23.48 tree
BitKeeper/etc/logging_ok:
auto-union
Docs/manual.texi:
Auto merged
innobase/dict/dict0dict.c:
Auto merged
innobase/include/srv0srv.h:
Auto merged
innobase/mem/mem0dbg.c:
Auto merged
innobase/os/os0file.c:
Auto merged
innobase/que/que0que.c:
Auto merged
innobase/rem/rem0rec.c:
Auto merged
innobase/row/row0sel.c:
Auto merged
innobase/srv/srv0srv.c:
Auto merged
innobase/srv/srv0start.c:
Auto merged
innobase/sync/sync0arr.c:
Auto merged
innobase/trx/trx0trx.c:
Auto merged
innobase/trx/trx0undo.c:
Auto merged
myisam/mi_check.c:
Auto merged
mysql-test/t/join.test:
Auto merged
mysys/hash.c:
Auto merged
scripts/mysql_config.sh:
Auto merged
sql/ha_innodb.h:
Auto merged
sql/handler.cc:
Auto merged
sql/handler.h:
Auto merged
sql/sql_acl.cc:
Auto merged
Diffstat (limited to 'innobase/mem/mem0dbg.c')
-rw-r--r-- | innobase/mem/mem0dbg.c | 94 |
1 files changed, 93 insertions, 1 deletions
diff --git a/innobase/mem/mem0dbg.c b/innobase/mem/mem0dbg.c index 571674a506b..f94119b7f38 100644 --- a/innobase/mem/mem0dbg.c +++ b/innobase/mem/mem0dbg.c @@ -810,7 +810,7 @@ mem_validate_no_assert(void) } mutex_exit(&mem_hash_mutex); - + return(error); #else @@ -834,3 +834,95 @@ mem_validate(void) return(TRUE); } + +/**************************************************************** +Tries to find neigboring memory allocation blocks and dumps to stderr +the neighborhood of a given pointer. */ + +void +mem_analyze_corruption( +/*===================*/ + byte* ptr) /* in: pointer to place of possible corruption */ +{ + byte* p; + ulint i; + ulint dist; + + ut_sprintf_buf(srv_fatal_errbuf, ptr - 250, 500); + fprintf(stderr, + "InnoDB: Apparent memory corruption: mem dump %s\n", srv_fatal_errbuf); + + fprintf(stderr, + "InnoDB: Scanning backward trying to find previous allocated mem blocks\n"); + + p = ptr; + dist = 0; + + for (i = 0; i < 10; i++) { + for (;;) { + if (((ulint)p) % 4 == 0) { + + if (*((ulint*)p) == MEM_BLOCK_MAGIC_N) { + fprintf(stderr, + "Mem block at - %lu, file %s, line %lu\n", + dist, p + sizeof(ulint), + *(ulint*)(p + 8 + sizeof(ulint))); + + break; + } + + if (*((ulint*)p) == MEM_FREED_BLOCK_MAGIC_N) { + fprintf(stderr, + "Freed mem block at - %lu, file %s, line %lu\n", + dist, p + sizeof(ulint), + *(ulint*)(p + 8 + sizeof(ulint))); + + break; + } + } + + p--; + dist++; + } + + p--; + dist++; + } + + fprintf(stderr, + "InnoDB: Scanning forward trying to find next allocated mem blocks\n"); + + p = ptr; + dist = 0; + + for (i = 0; i < 10; i++) { + for (;;) { + if (((ulint)p) % 4 == 0) { + + if (*((ulint*)p) == MEM_BLOCK_MAGIC_N) { + fprintf(stderr, + "Mem block at + %lu, file %s, line %lu\n", + dist, p + sizeof(ulint), + *(ulint*)(p + 8 + sizeof(ulint))); + + break; + } + + if (*((ulint*)p) == MEM_FREED_BLOCK_MAGIC_N) { + fprintf(stderr, + "Freed mem block at + %lu, file %s, line %lu\n", + dist, p + sizeof(ulint), + *(ulint*)(p + 8 + sizeof(ulint))); + + break; + } + } + + p++; + dist++; + } + + p++; + dist++; + } +} |