From 0fac6d3cb1a4826ed577013b4df7ee97b387bc97 Mon Sep 17 00:00:00 2001 From: skotlex Date: Thu, 8 Jun 2006 16:02:27 +0000 Subject: [PATCH] - Modified map_freeblock_unlock so that aFree errors will report the file/line that INVOKED the function rather than the function itself. NOTE: Do NOT disable the memory manager as that will break this change. This change is to be temporarily set until it can be resolved. git-svn-id: https://svn.code.sf.net/p/rathena/svn/trunk@7049 54d463be-8e91-2dee-dedb-b68131a5f0ec --- Changelog-Trunk.txt | 6 ++++++ src/common/malloc.c | 2 +- src/map/map.c | 6 ++++-- src/map/map.h | 4 +++- 4 files changed, 14 insertions(+), 4 deletions(-) diff --git a/Changelog-Trunk.txt b/Changelog-Trunk.txt index 11505388dc..2c447ca93b 100644 --- a/Changelog-Trunk.txt +++ b/Changelog-Trunk.txt @@ -4,6 +4,12 @@ AS OF SVN REV. 5091, WE ARE NOW USING TRUNK. ALL UNTESTED BUGFIXES/FEATURES GO IF YOU HAVE A WORKING AND TESTED BUGFIX PUT IT INTO STABLE AS WELL AS TRUNK. 2006/06/08 + * Modified map_freeblock_unlock so that aFree errors will report the + file/line that INVOKED the function rather than the function itself. + [Skotlex[ + NOTE: Do NOT disable the memory manager as that will break this change. + This change is to be temporarily set until the afree'd error can be + resolved. * Updated mob_npc_warp to a three-state config switch. 0 disables. 1 enable only on warps that don't lead to nobranch maps. 2 - enable on all warps. [Skotlex] diff --git a/src/common/malloc.c b/src/common/malloc.c index 6ed1668b9f..6eaa994d8d 100644 --- a/src/common/malloc.c +++ b/src/common/malloc.c @@ -393,7 +393,7 @@ void _mfree(void *ptr, const char *file, int line, const char *func ) { memmgr_usage_bytes -= head->size; FREE (head_large); } else { - ShowError("Memory manager: args of aFree is freed pointer %s line %d\n", file, line); + ShowError("Memory manager: args of aFree is freed pointer %s:%d@%s\n", file, line, func); } ptr = NULL; return; diff --git a/src/map/map.c b/src/map/map.c index a26430776e..28bdd51486 100644 --- a/src/map/map.c +++ b/src/map/map.c @@ -291,13 +291,15 @@ int map_freeblock_lock (void) * バッファにたまっていたblockを全部削除 *------------------------------------------ */ -int map_freeblock_unlock (void) +//Temporal debug function to figure out which unlock is causing already free'd pointer errors. +int map_freeblock_unlock_sub(const char * file, int line) { if ((--block_free_lock) == 0) { int i; for (i = 0; i < block_free_count; i++) { //Directly calling aFree shouldn't be a leak, as Free remembers the size the original pointed to memory was allocated with? [Skotlex] - aFree(block_free[i]); +// aFree(block_free[i]); + _mfree(block_free[i], file, line, __func__); block_free[i] = NULL; } block_free_count = 0; diff --git a/src/map/map.h b/src/map/map.h index 3853905d99..c0ed9cf165 100644 --- a/src/map/map.h +++ b/src/map/map.h @@ -1218,7 +1218,9 @@ int map_getusers(void); // block削除関連 int map_freeblock(struct block_list *bl); int map_freeblock_lock(void); -int map_freeblock_unlock(void); +//int map_freeblock_unlock(void); +#define map_freeblock_unlock() map_freeblock_unlock_sub(__FILE__, __LINE__) +int map_freeblock_unlock_sub(const char * file, int line); // block関連 int map_addblock_sub(struct block_list *, int); int map_delblock_sub(struct block_list *, int);