Fix memstack not freeing right size block
This commit is contained in:
parent
121c630126
commit
7e996981d6
8
dqn.h
8
dqn.h
@ -2918,6 +2918,7 @@ FILE_SCOPE void DqnMemAPIInternal_UpdateAPIStatistics(DqnMemAPI *api, DqnMemAPI:
|
|||||||
if (request_->type == DqnMemAPI::Type::Free)
|
if (request_->type == DqnMemAPI::Type::Free)
|
||||||
{
|
{
|
||||||
auto *request = &request_->free;
|
auto *request = &request_->free;
|
||||||
|
api->bytesAllocated -= request->sizeToFree;
|
||||||
api->lifetimeBytesFreed += request->sizeToFree;
|
api->lifetimeBytesFreed += request->sizeToFree;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -3140,6 +3141,7 @@ DQN_FILE_SCOPE DqnMemStack::Block *DqnMemStackInternal_AllocateBlock(u32 byteAli
|
|||||||
return nullptr;
|
return nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// TODO(doyle): Maybe remove this? and just do 2 allocations, this increases complexity by alot.
|
||||||
size_t alignedSize = DQN_ALIGN_POW_N(size, byteAlign);
|
size_t alignedSize = DQN_ALIGN_POW_N(size, byteAlign);
|
||||||
size_t totalSize = alignedSize + sizeof(DqnMemStack::Block) + (byteAlign -1);
|
size_t totalSize = alignedSize + sizeof(DqnMemStack::Block) + (byteAlign -1);
|
||||||
|
|
||||||
@ -3376,7 +3378,11 @@ bool DqnMemStack::FreeMemBlock(DqnMemStack::Block *memBlock)
|
|||||||
{
|
{
|
||||||
DqnMemStack::Block *blockToFree = *blockPtr;
|
DqnMemStack::Block *blockToFree = *blockPtr;
|
||||||
(*blockPtr) = blockToFree->prevBlock;
|
(*blockPtr) = blockToFree->prevBlock;
|
||||||
this->memAPI->Free(blockToFree, blockToFree->size);
|
|
||||||
|
// TODO(doyle): Maybe remove this? and just do 2 allocations, this increases complexity by alot.
|
||||||
|
size_t alignedSize = DQN_ALIGN_POW_N (blockToFree->size, this->byteAlign);
|
||||||
|
size_t realSize = alignedSize + sizeof(DqnMemStack::Block) + (this->byteAlign - 1);
|
||||||
|
this->memAPI->Free(blockToFree, realSize);
|
||||||
|
|
||||||
// No more blocks, then last block has been freed
|
// No more blocks, then last block has been freed
|
||||||
if (!this->block) DQN_ASSERT(this->tempRegionCount == 0);
|
if (!this->block) DQN_ASSERT(this->tempRegionCount == 0);
|
||||||
|
Loading…
Reference in New Issue
Block a user