X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=Common%2Frt%20api%2FMemoryPool.cpp;h=bde4ed0e10635e1b86b7d5b6f2be2613c10e92fd;hb=47c71901e7a97c226c8f1df749e3606d43656f32;hp=a6745073f0e97e9953c510280ac32b405106de2f;hpb=86bbf0fd5ba4e07d3279b4179fd8fc808198eaae;p=freerainbowtables diff --git a/Common/rt api/MemoryPool.cpp b/Common/rt api/MemoryPool.cpp index a674507..bde4ed0 100644 --- a/Common/rt api/MemoryPool.cpp +++ b/Common/rt api/MemoryPool.cpp @@ -5,7 +5,7 @@ * Copyright (C) Zhu Shuanglei * Copyright Martin Westergaard Jørgensen * Copyright 2009, 2010 Daniël Niggebrugge - * Copyright 2009, 2010 James Nobis + * Copyright 2009, 2010, 2011 James Nobis * Copyright 2010 uroskn * * This file is part of freerainbowtables. @@ -32,7 +32,7 @@ CMemoryPool::CMemoryPool() m_pMem = NULL; m_nMemSize = 0; - unsigned int nAvailPhys = GetAvailPhysMemorySize(); + unsigned long nAvailPhys = GetAvailPhysMemorySize(); if (nAvailPhys < 16 * 1024 * 1024) { nAvailPhys = 512 * 1024 * 1024; // There is atleast 256 mb available (Some Linux distros returns a really low GetAvailPhysMemorySize() @@ -45,7 +45,8 @@ CMemoryPool::CMemoryPool() CMemoryPool::~CMemoryPool() { - if (m_pMem != NULL) { + if (m_pMem != NULL) + { #ifdef _MEMORYDEBUG printf("Freeing %i bytes of memory\n", m_nMemSize); #endif @@ -55,22 +56,23 @@ CMemoryPool::~CMemoryPool() } } -unsigned char* CMemoryPool::Allocate(unsigned int nFileLen, unsigned int& nAllocatedSize) +unsigned char* CMemoryPool::Allocate(unsigned int nFileLen, uint64& nAllocatedSize) { - if (nFileLen <= m_nMemSize) { + if (nFileLen <= m_nMemSize) + { nAllocatedSize = nFileLen; return m_pMem; } unsigned int nTargetSize; - if (nFileLen < m_nMemMax) { + if (nFileLen < m_nMemMax) nTargetSize = nFileLen; - } - else { + else nTargetSize = m_nMemMax; - } + // Free existing memory - if (m_pMem != NULL) { + if (m_pMem != NULL) + { #ifdef _MEMORYDEBUG printf("Freeing %i bytes of memory\n", m_nMemSize); #endif @@ -81,21 +83,23 @@ unsigned char* CMemoryPool::Allocate(unsigned int nFileLen, unsigned int& nAlloc // Allocate new memory //printf("allocating %u bytes memory\n", nTargetSize); - // m_pMem = new unsigned char[nTargetSize]; #ifdef _MEMORYDEBUG printf("Allocating %i bytes of memory - ", nTargetSize); #endif m_pMem = new (nothrow) unsigned char[nTargetSize]; - while (m_pMem == NULL && nTargetSize >= 512 * 1024 * 1024 ) { + while (m_pMem == NULL && nTargetSize >= 512 * 1024 * 1024 ) + { #ifdef _MEMORYDEBUG printf("failed!\n"); printf("Allocating %i bytes of memory (backup) - ", nTargetSize); #endif - nTargetSize -= 16 * 1024 * 1024; - m_pMem = new (nothrow) unsigned char[nTargetSize]; + nTargetSize -= 16 * 1024 * 1024; + m_pMem = new (nothrow) unsigned char[nTargetSize]; } - if (m_pMem != NULL) { + + if (m_pMem != NULL) + { #ifdef _MEMORYDEBUG printf("success!\n"); #endif @@ -103,7 +107,9 @@ unsigned char* CMemoryPool::Allocate(unsigned int nFileLen, unsigned int& nAlloc nAllocatedSize = nTargetSize; return m_pMem; } - else { + else + { + m_nMemSize = 0; nAllocatedSize = 0; return NULL; }