Selaa lähdekoodia

* Made NO_MEMMGR only be set as a default value, allowing for simultaneous use with the memory libraries.
* Moved memory library selection to malloc.c to avoid poisoning the namespace of the rest of the code.
* Removed BCHECK code since it's unneeded. (bcheck is an external batch tool that runs on top of the dbx debugger)
* Fixed GCOLLECT usage. (missing init and final memory leak check)
* Fixed DMALLOC usage. (missing options on CYGWIN and verify memory)
* Renamed malloc_verify to malloc_verify_ptr to avoid conflict with DMALLOC.
* Changed itemtype from inline to static inline to avoid error with the SunOS compiler.

git-svn-id: https://svn.code.sf.net/p/rathena/svn/trunk@14913 54d463be-8e91-2dee-dedb-b68131a5f0ec

flaviojs 14 vuotta sitten
vanhempi
commit
4369fa70e9
5 muutettua tiedostoa jossa 91 lisäystä ja 81 poistoa
  1. 8 0
      Changelog-Trunk.txt
  2. 0 4
      src/common/core.c
  3. 69 7
      src/common/malloc.c
  4. 13 69
      src/common/malloc.h
  5. 1 1
      src/map/clif.c

+ 8 - 0
Changelog-Trunk.txt

@@ -1,5 +1,13 @@
 Date	Added
 
+2011/07/19
+	* Made NO_MEMMGR only be set as a default value, allowing for simultaneous use with the memory libraries. [FlavioJS]
+	* Moved memory library selection to malloc.c to avoid poisoning the namespace of the rest of the code.
+	* Removed BCHECK code since it's uneeded. (bcheck is an external batch tool that runs on top of the dbx debugger)
+	* Fixed GCOLLECT usage. (missing init and final memory leak check)
+	* Fixed DMALLOC usage. (missing options on CYGWIN and verify memory)
+	* Renamed malloc_verify to malloc_verify_ptr to avoid conflict with DMALLOC.
+	* Changed itemtype from inline to static inline to avoid error with the SunOS compiler.
 2011/07/15
 	* Changed the warning message of when setrlimit fails to be more explicit. [FlavioJS] 
 	* CMake: added tests for big endian, typecast to union and monotonic clock.

+ 0 - 4
src/common/core.c

@@ -276,7 +276,3 @@ int main (int argc, char **argv)
 
 	return 0;
 }
-
-#ifdef BCHECK
-unsigned int __invalid_size_argument_for_IOC;
-#endif

+ 69 - 7
src/common/malloc.c

@@ -10,9 +10,58 @@
 #include <string.h>
 #include <time.h>
 
-// no logging for minicore
-#if defined(MINICORE) && defined(LOG_MEMMGR)
-#undef LOG_MEMMGR
+////////////// Memory Libraries //////////////////
+
+#if defined(MEMWATCH)
+
+#	include <string.h> 
+#	include "memwatch.h"
+#	define MALLOC(n,file,line,func)	mwMalloc((n),(file),(line))
+#	define MALLOCA(n,file,line,func)	mwMalloc((n),(file),(line))
+#	define CALLOC(m,n,file,line,func)	mwCalloc((m),(n),(file),(line))
+#	define CALLOCA(m,n,file,line,func)	mwCalloc((m),(n),(file),(line))
+#	define REALLOC(p,n,file,line,func)	mwRealloc((p),(n),(file),(line))
+#	define STRDUP(p,file,line,func)	mwStrdup((p),(file),(line))
+#	define FREE(p,file,line,func)		mwFree((p),(file),(line))
+
+#elif defined(DMALLOC)
+
+#	include <string.h>
+#	include <stdlib.h>
+#	include "dmalloc.h"
+#	define MALLOC(n,file,line,func)	dmalloc_malloc((file),(line),(n),DMALLOC_FUNC_MALLOC,0,0)
+#	define MALLOCA(n,file,line,func)	dmalloc_malloc((file),(line),(n),DMALLOC_FUNC_MALLOC,0,0)
+#	define CALLOC(m,n,file,line,func)	dmalloc_malloc((file),(line),(m)*(n),DMALLOC_FUNC_CALLOC,0,0)
+#	define CALLOCA(m,n,file,line,func)	dmalloc_malloc((file),(line),(m)*(n),DMALLOC_FUNC_CALLOC,0,0)
+#	define REALLOC(p,n,file,line,func)	dmalloc_realloc((file),(line),(p),(n),DMALLOC_FUNC_REALLOC,0)
+#	define STRDUP(p,file,line,func)	strdup(p)
+#	define FREE(p,file,line,func)		free(p)
+
+#elif defined(GCOLLECT)
+
+#	include "gc.h"
+#	define MALLOC(n,file,line,func)	GC_MALLOC(n)
+#	define MALLOCA(n,file,line,func)	GC_MALLOC_ATOMIC(n)
+#	define CALLOC(m,n,file,line,func)	_bcalloc((m),(n))
+#	define CALLOCA(m,n,file,line,func)	_bcallocA((m),(n))
+#	define REALLOC(p,n,file,line,func)	GC_REALLOC((p),(n))
+#	define STRDUP(p,file,line,func)	_bstrdup(p)
+#	define FREE(p,file,line,func)		GC_FREE(p)
+
+	void * _bcalloc(size_t, size_t);
+	void * _bcallocA(size_t, size_t);
+	char * _bstrdup(const char *);
+
+#else
+
+#	define MALLOC(n,file,line,func)	malloc(n)
+#	define MALLOCA(n,file,line,func)	malloc(n)
+#	define CALLOC(m,n,file,line,func)	calloc((m),(n))
+#	define CALLOCA(m,n,file,line,func)	calloc((m),(n))
+#	define REALLOC(p,n,file,line,func)	realloc((p),(n))
+#	define STRDUP(p,file,line,func)	strdup(p)
+#	define FREE(p,file,line,func)		free(p)
+
 #endif
 
 void* aMalloc_(size_t size, const char *file, int line, const char *func)
@@ -90,20 +139,20 @@ void aFree_(void *p, const char *file, int line, const char *func)
 
 void* _bcallocA(size_t size, size_t cnt)
 {
-	void *ret = MALLOCA(size * cnt);
+	void *ret = GC_MALLOC_ATOMIC(size * cnt);
 	if (ret) memset(ret, 0, size * cnt);
 	return ret;
 }
 void* _bcalloc(size_t size, size_t cnt)
 {
-	void *ret = MALLOC(size * cnt);
+	void *ret = GC_MALLOC(size * cnt);
 	if (ret) memset(ret, 0, size * cnt);
 	return ret;
 }
 char* _bstrdup(const char *chr)
 {
 	int len = strlen(chr);
-	char *ret = (char*)MALLOC(len + 1);
+	char *ret = (char*)GC_MALLOC(len + 1);
 	if (ret) memcpy(ret, chr, len + 1);
 	return ret;
 }
@@ -654,10 +703,12 @@ static void memmgr_init (void)
  *--------------------------------------
  */
 
-bool malloc_verify(void* ptr)
+bool malloc_verify_ptr(void* ptr)
 {
 #ifdef USE_MEMMGR
 	return memmgr_verify(ptr);
+#elif defined(DMALLOC)
+	return (dmalloc_verify(ptr) == DMALLOC_VERIFY_NOERROR);
 #else
 	return true;
 #endif
@@ -677,10 +728,21 @@ void malloc_final (void)
 #ifdef USE_MEMMGR
 	memmgr_final ();
 #endif
+#ifdef GCOLLECT
+	GC_find_leak = 1;
+	GC_gcollect();
+#endif
 }
 
 void malloc_init (void)
 {
+#if defined(DMALLOC) && defined(CYGWIN)
+	// http://dmalloc.com/docs/latest/online/dmalloc_19.html
+	dmalloc_debug_setup(getenv("DMALLOC_OPTIONS"));
+#endif
+#ifdef GCOLLECT
+	GC_INIT();
+#endif
 #ifdef USE_MEMMGR
 	memmgr_init ();
 #endif

+ 13 - 69
src/common/malloc.h

@@ -15,17 +15,17 @@
 
 #define ALC_MARK __FILE__, __LINE__, __func__
 
-// disable built-in memory manager when using another manager
-#if defined(MEMWATCH) || defined(DMALLOC) || defined(GCOLLECT) || defined(BCHECK)
-#if !defined(NO_MEMMGR)
-#define NO_MEMMGR
-#endif
-#endif
 
-// Use built-in memory manager by default
+// default memory manager
 #if !defined(NO_MEMMGR) && !defined(USE_MEMMGR)
+#if defined(MEMWATCH) || defined(DMALLOC) || defined(GCOLLECT)
+// disable built-in memory manager when using another manager
+#define NO_MEMMGR
+#else
+// use built-in memory manager by default
 #define USE_MEMMGR
 #endif
+#endif
 
 
 //////////////////////////////////////////////////////////////////////
@@ -35,6 +35,11 @@
 // Enable memory manager logging by default
 #define LOG_MEMMGR
 
+// no logging for minicore
+#if defined(MINICORE) && defined(LOG_MEMMGR)
+#undef LOG_MEMMGR
+#endif
+
 #	define aMalloc(n)		_mmalloc(n,ALC_MARK)
 #	define aMallocA(n)		_mmalloc(n,ALC_MARK)
 #	define aCalloc(m,n)		_mcalloc(m,n,ALC_MARK)
@@ -69,67 +74,6 @@
 
 #endif
 
-////////////// Memory Managers //////////////////
-
-#if defined(MEMWATCH)
-
-#	include "memwatch.h"
-#	define MALLOC(n,file,line,func)	mwMalloc((n),(file),(line))
-#	define MALLOCA(n,file,line,func)	mwMalloc((n),(file),(line))
-#	define CALLOC(m,n,file,line,func)	mwCalloc((m),(n),(file),(line))
-#	define CALLOCA(m,n,file,line,func)	mwCalloc((m),(n),(file),(line))
-#	define REALLOC(p,n,file,line,func)	mwRealloc((p),(n),(file),(line))
-#	define STRDUP(p,file,line,func)	mwStrdup((p),(file),(line))
-#	define FREE(p,file,line,func)		mwFree((p),(file),(line))
-
-#elif defined(DMALLOC)
-
-#	include "dmalloc.h"
-#	define MALLOC(n,file,line,func)	dmalloc_malloc((file),(line),(n),DMALLOC_FUNC_MALLOC,0,0)
-#	define MALLOCA(n,file,line,func)	dmalloc_malloc((file),(line),(n),DMALLOC_FUNC_MALLOC,0,0)
-#	define CALLOC(m,n,file,line,func)	dmalloc_malloc((file),(line),(m)*(n),DMALLOC_FUNC_CALLOC,0,0)
-#	define CALLOCA(m,n,file,line,func)	dmalloc_malloc((file),(line),(m)*(n),DMALLOC_FUNC_CALLOC,0,0)
-#	define REALLOC(p,n,file,line,func)	dmalloc_realloc((file),(line),(p),(n),DMALLOC_FUNC_REALLOC,0)
-#	define STRDUP(p,file,line,func)	strdup(p)
-#	define FREE(p,file,line,func)		free(p)
-
-#elif defined(GCOLLECT)
-
-#	include "gc.h"
-#	define MALLOC(n,file,line,func)	GC_MALLOC(n)
-#	define MALLOCA(n,file,line,func)	GC_MALLOC_ATOMIC(n)
-#	define CALLOC(m,n,file,line,func)	_bcalloc((m),(n))
-#	define CALLOCA(m,n,file,line,func)	_bcallocA((m),(n))
-#	define REALLOC(p,n,file,line,func)	GC_REALLOC((p),(n))
-#	define STRDUP(p,file,line,func)	_bstrdup(p)
-#	define FREE(p,file,line,func)		GC_FREE(p)
-
-	void * _bcalloc(size_t, size_t);
-	void * _bcallocA(size_t, size_t);
-	char * _bstrdup(const char *);
-
-#elif defined(BCHECK)
-
-#	define MALLOC(n,file,line,func)	malloc(n)
-#	define MALLOCA(n,file,line,func)	malloc(n)
-#	define CALLOC(m,n,file,line,func)	calloc((m),(n))
-#	define CALLOCA(m,n,file,line,func)	calloc((m),(n))
-#	define REALLOC(p,n,file,line,func)	realloc((p),(n))
-#	define STRDUP(p,file,line,func)	strdup(p)
-#	define FREE(p,file,line,func)		free(p)
-
-#else
-
-#	define MALLOC(n,file,line,func)	malloc(n)
-#	define MALLOCA(n,file,line,func)	malloc(n)
-#	define CALLOC(m,n,file,line,func)	calloc((m),(n))
-#	define CALLOCA(m,n,file,line,func)	calloc((m),(n))
-#	define REALLOC(p,n,file,line,func)	realloc((p),(n))
-#	define STRDUP(p,file,line,func)	strdup(p)
-#	define FREE(p,file,line,func)		free(p)
-
-#endif
-
 /////////////// Buffer Creation /////////////////
 // Full credit for this goes to Shinomori [Ajarn]
 
@@ -155,7 +99,7 @@
 
 ////////////////////////////////////////////////
 
-bool malloc_verify(void* ptr);
+bool malloc_verify_ptr(void* ptr);
 size_t malloc_usage (void);
 void malloc_init (void);
 void malloc_final (void);

+ 1 - 1
src/map/clif.c

@@ -57,7 +57,7 @@ struct Clif_Config {
 struct s_packet_db packet_db[MAX_PACKET_VER + 1][MAX_PACKET_DB + 1];
 
 //Converts item type in case of pet eggs.
-inline int itemtype(int type)
+static inline int itemtype(int type)
 {
 	return ( type == IT_PETEGG ) ? IT_WEAPON : type;
 }