| 92 | } |
| 93 | |
| 94 | void* MemoryManager::reallocPointer( void* data, const AllocatedPointer& aAllocatedPointer ) { |
| 95 | Lock l( sAllocMutex ); |
| 96 | |
| 97 | AllocatedPointerMapIt it = sMapPointers.find( data ); |
| 98 | |
| 99 | if ( it != sMapPointers.end() && it->second.mTrack ) |
| 100 | eePRINTL( "Realloc pointer %p at '%s' %d", data, aAllocatedPointer.mFile.c_str(), |
| 101 | aAllocatedPointer.mLine ); |
| 102 | |
| 103 | if ( it == sMapPointers.end() ) |
| 104 | return addPointer( aAllocatedPointer ); |
| 105 | |
| 106 | if ( aAllocatedPointer.mTrack ) |
| 107 | eePRINTL( "Reallocating pointer %p at '%s' %d", aAllocatedPointer.mData, |
| 108 | aAllocatedPointer.mFile.c_str(), aAllocatedPointer.mLine ); |
| 109 | |
| 110 | if ( it->first != aAllocatedPointer.mData ) { |
| 111 | removePointer( data, aAllocatedPointer.mFile.c_str(), aAllocatedPointer.mLine ); |
| 112 | addPointer( aAllocatedPointer ); |
| 113 | } else { |
| 114 | sTotalMemoryUsage -= it->second.mMemory; |
| 115 | it->second.mMemory = aAllocatedPointer.mMemory; |
| 116 | it->second.mFile = aAllocatedPointer.mFile; |
| 117 | it->second.mLine = aAllocatedPointer.mLine; |
| 118 | it->second.mTrack = aAllocatedPointer.mTrack; |
| 119 | |
| 120 | sTotalMemoryUsage += aAllocatedPointer.mMemory; |
| 121 | |
| 122 | if ( sPeakMemoryUsage < sTotalMemoryUsage ) { |
| 123 | sPeakMemoryUsage = sTotalMemoryUsage; |
| 124 | } |
| 125 | |
| 126 | if ( aAllocatedPointer.mMemory > sBiggestAllocation.mMemory ) { |
| 127 | sBiggestAllocation = aAllocatedPointer; |
| 128 | } |
| 129 | } |
| 130 | |
| 131 | return aAllocatedPointer.mData; |
| 132 | } |
| 133 | |
| 134 | bool MemoryManager::removePointer( void* data, const char* file, const size_t& line ) { |
| 135 | Lock l( sAllocMutex ); |