• Main Page
  • Related Pages
  • Modules
  • Namespaces
  • Classes
  • Files
  • File List
  • File Members

RakMemoryOverride.cpp

Go to the documentation of this file.
00001 #include "RakMemoryOverride.h"
00002 #include "RakAssert.h"
00003 #include <stdlib.h>
00004 
00005 #ifdef _RAKNET_SUPPORT_DL_MALLOC
00006 #include "rdlmalloc.h"
00007 #endif
00008 
00009 #if defined(_PS3) || defined(__PS3__) || defined(SN_TARGET_PS3)
00010                         
00011 #endif
00012 
00013 using namespace RakNet;
00014 
00015 #if _USE_RAK_MEMORY_OVERRIDE==1
00016         #if defined(malloc)
00017         #pragma push_macro("malloc")
00018         #undef malloc
00019         #define RMO_MALLOC_UNDEF
00020         #endif
00021 
00022         #if defined(realloc)
00023         #pragma push_macro("realloc")
00024         #undef realloc
00025         #define RMO_REALLOC_UNDEF
00026         #endif
00027 
00028         #if defined(free)
00029         #pragma push_macro("free")
00030         #undef free
00031         #define RMO_FREE_UNDEF
00032         #endif
00033 #endif
00034 
00035 void DefaultOutOfMemoryHandler(const char *file, const long line)
00036 {
00037         (void) file;
00038         (void) line;
00039         RakAssert(0);
00040 }
00041 
00042 void * (*rakMalloc) (size_t size) = RakNet::_RakMalloc;
00043 void* (*rakRealloc) (void *p, size_t size) = RakNet::_RakRealloc;
00044 void (*rakFree) (void *p) = RakNet::_RakFree;
00045 void* (*rakMalloc_Ex) (size_t size, const char *file, unsigned int line) = RakNet::_RakMalloc_Ex;
00046 void* (*rakRealloc_Ex) (void *p, size_t size, const char *file, unsigned int line) = RakNet::_RakRealloc_Ex;
00047 void (*rakFree_Ex) (void *p, const char *file, unsigned int line) = RakNet::_RakFree_Ex;
00048 void (*notifyOutOfMemory) (const char *file, const long line)=DefaultOutOfMemoryHandler;
00049 void * (*dlMallocMMap) (size_t size) = RakNet::_DLMallocMMap;
00050 void * (*dlMallocDirectMMap) (size_t size) = RakNet::_DLMallocDirectMMap;
00051 int (*dlMallocMUnmap) (void* ptr, size_t size) = RakNet::_DLMallocMUnmap;
00052 
00053 void SetMalloc( void* (*userFunction)(size_t size) )
00054 {
00055         rakMalloc=userFunction;
00056 }
00057 void SetRealloc( void* (*userFunction)(void *p, size_t size) )
00058 {
00059         rakRealloc=userFunction;
00060 }
00061 void SetFree( void (*userFunction)(void *p) )
00062 {
00063         rakFree=userFunction;
00064 }
00065 void SetMalloc_Ex( void* (*userFunction)(size_t size, const char *file, unsigned int line) )
00066 {
00067         rakMalloc_Ex=userFunction;
00068 }
00069 void SetRealloc_Ex( void* (*userFunction)(void *p, size_t size, const char *file, unsigned int line) )
00070 {
00071         rakRealloc_Ex=userFunction;
00072 }
00073 void SetFree_Ex( void (*userFunction)(void *p, const char *file, unsigned int line) )
00074 {
00075         rakFree_Ex=userFunction;
00076 }
00077 void SetNotifyOutOfMemory( void (*userFunction)(const char *file, const long line) )
00078 {
00079         notifyOutOfMemory=userFunction;
00080 }
00081 void SetDLMallocMMap( void* (*userFunction)(size_t size) )
00082 {
00083         dlMallocMMap=userFunction;
00084 }
00085 void SetDLMallocDirectMMap( void* (*userFunction)(size_t size) )
00086 {
00087         dlMallocDirectMMap=userFunction;
00088 }
00089 void SetDLMallocMUnmap( int (*userFunction)(void* ptr, size_t size) )
00090 {
00091         dlMallocMUnmap=userFunction;
00092 }
00093 void * (*GetMalloc()) (size_t size)
00094 {
00095         return rakMalloc;
00096 }
00097 void * (*GetRealloc()) (void *p, size_t size)
00098 {
00099         return rakRealloc;
00100 }
00101 void (*GetFree()) (void *p)
00102 {
00103         return rakFree;
00104 }
00105 void * (*GetMalloc_Ex()) (size_t size, const char *file, unsigned int line)
00106 {
00107         return rakMalloc_Ex;
00108 }
00109 void * (*GetRealloc_Ex()) (void *p, size_t size, const char *file, unsigned int line)
00110 {
00111         return rakRealloc_Ex;
00112 }
00113 void (*GetFree_Ex()) (void *p, const char *file, unsigned int line)
00114 {
00115         return rakFree_Ex;
00116 }
00117 void *(*GetDLMallocMMap())(size_t size)
00118 {
00119         return dlMallocMMap;
00120 }
00121 void *(*GetDLMallocDirectMMap())(size_t size)
00122 {
00123         return dlMallocDirectMMap;
00124 }
00125 int (*GetDLMallocMUnmap())(void* ptr, size_t size)
00126 {
00127         return dlMallocMUnmap;
00128 }
00129 void* RakNet::_RakMalloc (size_t size)
00130 {
00131         return malloc(size);
00132 }
00133 
00134 void* RakNet::_RakRealloc (void *p, size_t size)
00135 {
00136         return realloc(p,size);
00137 }
00138 
00139 void RakNet::_RakFree (void *p)
00140 {
00141         free(p);
00142 }
00143 
00144 void* RakNet::_RakMalloc_Ex (size_t size, const char *file, unsigned int line)
00145 {
00146         (void) file;
00147         (void) line;
00148 
00149         return malloc(size);
00150 }
00151 
00152 void* RakNet::_RakRealloc_Ex (void *p, size_t size, const char *file, unsigned int line)
00153 {
00154         (void) file;
00155         (void) line;
00156 
00157         return realloc(p,size);
00158 }
00159 
00160 void RakNet::_RakFree_Ex (void *p, const char *file, unsigned int line)
00161 {
00162         (void) file;
00163         (void) line;
00164 
00165         free(p);
00166 }
00167 #ifdef _RAKNET_SUPPORT_DL_MALLOC
00168 void * RakNet::_DLMallocMMap (size_t size)
00169 {
00170         return RAK_MMAP_DEFAULT(size);
00171 }
00172 void * RakNet::_DLMallocDirectMMap (size_t size)
00173 {
00174         return RAK_DIRECT_MMAP_DEFAULT(size);
00175 }
00176 int RakNet::_DLMallocMUnmap (void *p, size_t size)
00177 {
00178         return RAK_MUNMAP_DEFAULT(p,size);
00179 }
00180 
00181 static mspace rakNetFixedHeapMSpace=0;
00182 
00183 void* _DLMalloc(size_t size)
00184 {
00185         return rak_mspace_malloc(rakNetFixedHeapMSpace,size);
00186 }
00187 
00188 void* _DLRealloc(void *p, size_t size)
00189 {
00190         return rak_mspace_realloc(rakNetFixedHeapMSpace,p,size);
00191 }
00192 
00193 void _DLFree(void *p)
00194 {
00195         if (p)
00196                 rak_mspace_free(rakNetFixedHeapMSpace,p);
00197 }
00198 void* _DLMalloc_Ex (size_t size, const char *file, unsigned int line)
00199 {
00200         (void) file;
00201         (void) line;
00202 
00203         return rak_mspace_malloc(rakNetFixedHeapMSpace,size);
00204 }
00205 
00206 void* _DLRealloc_Ex (void *p, size_t size, const char *file, unsigned int line)
00207 {
00208         (void) file;
00209         (void) line;
00210 
00211         return rak_mspace_realloc(rakNetFixedHeapMSpace,p,size);
00212 }
00213 
00214 void _DLFree_Ex (void *p, const char *file, unsigned int line)
00215 {
00216         (void) file;
00217         (void) line;
00218 
00219         if (p)
00220                 rak_mspace_free(rakNetFixedHeapMSpace,p);
00221 }
00222 
00223 void UseRaknetFixedHeap(size_t initialCapacity,
00224                                                 void * (*yourMMapFunction) (size_t size),
00225                                                 void * (*yourDirectMMapFunction) (size_t size),
00226                                                 int (*yourMUnmapFunction) (void *p, size_t size))
00227 {
00228         SetDLMallocMMap(yourMMapFunction);
00229         SetDLMallocDirectMMap(yourDirectMMapFunction);
00230         SetDLMallocMUnmap(yourMUnmapFunction);
00231         SetMalloc(_DLMalloc);
00232         SetRealloc(_DLRealloc);
00233         SetFree(_DLFree);
00234         SetMalloc_Ex(_DLMalloc_Ex);
00235         SetRealloc_Ex(_DLRealloc_Ex);
00236         SetFree_Ex(_DLFree_Ex);
00237 
00238         rakNetFixedHeapMSpace=rak_create_mspace(initialCapacity, 0);
00239 }
00240 void FreeRakNetFixedHeap(void)
00241 {
00242         if (rakNetFixedHeapMSpace)
00243         {
00244                 rak_destroy_mspace(rakNetFixedHeapMSpace);
00245                 rakNetFixedHeapMSpace=0;
00246         }
00247 
00248         SetMalloc(_RakMalloc);
00249         SetRealloc(_RakRealloc);
00250         SetFree(_RakFree);
00251         SetMalloc_Ex(_RakMalloc_Ex);
00252         SetRealloc_Ex(_RakRealloc_Ex);
00253         SetFree_Ex(_RakFree_Ex);
00254 }
00255 #else
00256 void * RakNet::_DLMallocMMap (size_t size) {(void) size; return 0;}
00257 void * RakNet::_DLMallocDirectMMap (size_t size) {(void) size; return 0;}
00258 int RakNet::_DLMallocMUnmap (void *p, size_t size) {(void) size; (void) p; return 0;}
00259 void* _DLMalloc(size_t size) {(void) size; return 0;}
00260 void* _DLRealloc(void *p, size_t size) {(void) p; (void) size; return 0;}
00261 void _DLFree(void *p) {(void) p;}
00262 void* _DLMalloc_Ex (size_t size, const char *file, unsigned int line) {(void) size; (void) file; (void) line; return 0;}
00263 void* _DLRealloc_Ex (void *p, size_t size, const char *file, unsigned int line) {(void) p; (void) size; (void) file; (void) line; return 0;}
00264 void _DLFree_Ex (void *p, const char *file, unsigned int line) {(void) p; (void) file; (void) line;}
00265 
00266 void UseRaknetFixedHeap(size_t initialCapacity,
00267                                                 void * (*yourMMapFunction) (size_t size),
00268                                                 void * (*yourDirectMMapFunction) (size_t size),
00269                                                 int (*yourMUnmapFunction) (void *p, size_t size))
00270 {
00271         (void) initialCapacity;
00272         (void) yourMMapFunction;
00273         (void) yourDirectMMapFunction;
00274         (void) yourMUnmapFunction;
00275 }
00276 void FreeRakNetFixedHeap(void) {}
00277 #endif
00278 
00279 #if _USE_RAK_MEMORY_OVERRIDE==1
00280         #if defined(RMO_MALLOC_UNDEF)
00281         #pragma pop_macro("malloc")
00282         #undef RMO_MALLOC_UNDEF
00283         #endif
00284 
00285         #if defined(RMO_REALLOC_UNDEF)
00286         #pragma pop_macro("realloc")
00287         #undef RMO_REALLOC_UNDEF
00288         #endif
00289 
00290         #if defined(RMO_FREE_UNDEF)
00291         #pragma pop_macro("free")
00292         #undef RMO_FREE_UNDEF
00293         #endif
00294 #endif

Generated on Thu Sep 30 2010 01:27:26 for RakNet by  doxygen 1.7.1