Sfoglia il codice sorgente

- Changed the map_freeblock_unlock code so that when there's an "already free'd pointer" error, the memory manager will print out the invoking function rather than map_freeblock_unlock, this should help fix it up next time it happens.

git-svn-id: https://svn.code.sf.net/p/rathena/svn/trunk@8189 54d463be-8e91-2dee-dedb-b68131a5f0ec
skotlex 19 anni fa
parent
commit
d12f317dbb
3 ha cambiato i file con 11 aggiunte e 3 eliminazioni
  1. 4 0
      Changelog-Trunk.txt
  2. 4 2
      src/map/map.c
  3. 3 1
      src/map/map.h

+ 4 - 0
Changelog-Trunk.txt

@@ -4,6 +4,10 @@ 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/08/08
+	* Changed the map_freeblock_unlock code so that when there's an "already
+	  free'd pointer" error, the memory manager will print out the invoking
+	  function rather than map_freeblock_unlock, this should help fix it up next
+	  time it happens and is reported. [Skotlex]
 	* Casting Kaensin will clear out Suiton and viceversa now. [Skotlex]
 	* Fixed drop-rates (@whodrops) getting duplicates when you use @reloadmobdb
 	  [Skotlex]

+ 4 - 2
src/map/map.c

@@ -290,13 +290,15 @@ int map_freeblock_lock (void)
  * バッファにたまっていたblockを全部削除
  *------------------------------------------
  */
-int map_freeblock_unlock (void)
+//int map_freeblock_unlock (void)
+int map_freeblock_unlock_sub(char *file, int lineno)
 {
 	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, lineno, __func__);
 			block_free[i] = NULL;
 		}
 		block_free_count = 0;

+ 3 - 1
src/map/map.h

@@ -1278,7 +1278,9 @@ int map_getusers(void);
 // block�í�œŠÖ˜A
 int map_freeblock(struct block_list *bl);
 int map_freeblock_lock(void);
-int map_freeblock_unlock(void);
+//int map_freeblock_unlock(void);
+int map_freeblock_unlock_sub (char *file, int lineno);
+#define map_freeblock_unlock() map_freeblock_unlock_sub (__FILE__, __LINE__)
 // blockŠÖ˜A
 int map_addblock_sub(struct block_list *, int);
 int map_delblock_sub(struct block_list *, int);