瀏覽代碼

Removed malloc's Atomic (-A) function macros (see r968, changelog 01/20). They were specific to the GC allocator (atomic = promise to not have any pointers to other things inside = will be skipped during Mark phase), serving as a (dubious) optimization trick - which could cause GC to malfunction if used incorrectly.
Simplified GC's CALLOC, since the GC docs say GC_MALLOC automatically clears memory.

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

ultramage 14 年之前
父節點
當前提交
13511f4ea9
共有 2 個文件被更改,包括 6 次插入53 次删除
  1. 1 44
      src/common/malloc.c
  2. 5 9
      src/common/malloc.h

+ 1 - 44
src/common/malloc.c

@@ -17,9 +17,7 @@
 #	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))
@@ -30,9 +28,7 @@
 #	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)
@@ -41,23 +37,17 @@
 
 #	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 CALLOC(m,n,file,line,func)	GC_MALLOC((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)
@@ -75,17 +65,6 @@ void* aMalloc_(size_t size, const char *file, int line, const char *func)
 
 	return ret;
 }
-void* aMallocA_(size_t size, const char *file, int line, const char *func)
-{
-	void *ret = MALLOCA(size, file, line, func);
-	// ShowMessage("%s:%d: in func %s: aMallocA %d\n",file,line,func,size);
-	if (ret == NULL){
-		ShowFatalError("%s:%d: in func %s: aMallocA error out of memory!\n",file,line,func);
-		exit(EXIT_FAILURE);
-	}
-
-	return ret;
-}
 void* aCalloc_(size_t num, size_t size, const char *file, int line, const char *func)
 {
 	void *ret = CALLOC(num, size, file, line, func);
@@ -96,16 +75,6 @@ void* aCalloc_(size_t num, size_t size, const char *file, int line, const char *
 	}
 	return ret;
 }
-void* aCallocA_(size_t num, size_t size, const char *file, int line, const char *func)
-{
-	void *ret = CALLOCA(num, size, file, line, func);
-	// ShowMessage("%s:%d: in func %s: aCallocA %d %d\n",file,line,func,num,size);
-	if (ret == NULL){
-		ShowFatalError("%s:%d: in func %s: aCallocA error out of memory!\n",file,line,func);
-		exit(EXIT_FAILURE);
-	}
-	return ret;
-}
 void* aRealloc_(void *p, size_t size, const char *file, int line, const char *func)
 {
 	void *ret = REALLOC(p, size, file, line, func);
@@ -137,18 +106,6 @@ void aFree_(void *p, const char *file, int line, const char *func)
 
 #ifdef GCOLLECT
 
-void* _bcallocA(size_t size, size_t 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 = GC_MALLOC(size * cnt);
-	if (ret) memset(ret, 0, size * cnt);
-	return ret;
-}
 char* _bstrdup(const char *chr)
 {
 	int len = strlen(chr);

+ 5 - 9
src/common/malloc.h

@@ -41,9 +41,7 @@
 #endif
 
 #	define aMalloc(n)		_mmalloc(n,ALC_MARK)
-#	define aMallocA(n)		_mmalloc(n,ALC_MARK)
 #	define aCalloc(m,n)		_mcalloc(m,n,ALC_MARK)
-#	define aCallocA(m,n)	_mcalloc(m,n,ALC_MARK)
 #	define aRealloc(p,n)	_mrealloc(p,n,ALC_MARK)
 #	define aStrdup(p)		_mstrdup(p,ALC_MARK)
 #	define aFree(p)			_mfree(p,ALC_MARK)
@@ -57,23 +55,24 @@
 #else
 
 #	define aMalloc(n)		aMalloc_((n),ALC_MARK)
-#	define aMallocA(n)		aMallocA_((n),ALC_MARK)
 #	define aCalloc(m,n)		aCalloc_((m),(n),ALC_MARK)
-#	define aCallocA(m,n)	aCallocA_(m,n,ALC_MARK)
 #	define aRealloc(p,n)	aRealloc_(p,n,ALC_MARK)
 #	define aStrdup(p)		aStrdup_(p,ALC_MARK)
 #	define aFree(p)			aFree_(p,ALC_MARK)
 
 	void* aMalloc_	(size_t size, const char *file, int line, const char *func);
-	void* aMallocA_	(size_t size, const char *file, int line, const char *func);
 	void* aCalloc_	(size_t num, size_t size, const char *file, int line, const char *func);
-	void* aCallocA_	(size_t num, size_t size, const char *file, int line, const char *func);
 	void* aRealloc_	(void *p, size_t size, const char *file, int line, const char *func);
 	char* aStrdup_	(const char *p, const char *file, int line, const char *func);
 	void  aFree_	(void *p, const char *file, int line, const char *func);
 
 #endif
 
+// deprecated, do not use
+#define aMallocA aMalloc
+#define aCallocA aCalloc
+#define CREATE_A CREATE
+
 /////////////// Buffer Creation /////////////////
 // Full credit for this goes to Shinomori [Ajarn]
 
@@ -92,9 +91,6 @@
 ////////////// Others //////////////////////////
 // should be merged with any of above later
 #define CREATE(result, type, number) (result) = (type *) aCalloc ((number), sizeof(type))
-
-#define CREATE_A(result, type, number) (result) = (type *) aCallocA ((number), sizeof(type))
-
 #define RECREATE(result, type, number) (result) = (type *) aRealloc ((result), sizeof(type) * (number))
 
 ////////////////////////////////////////////////