MCPcopy Create free account
hub / github.com/TheForceEngine/TheForceEngine / region_free

Function region_free

TheForceEngine/TFE_Memory/memoryRegion.cpp:380–409  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

378 }
379
380 void region_free(MemoryRegion* region, void* ptr)
381 {
382 if (!ptr || !region) { return; }
383
384 for (s32 i = (s32)region->blockCount - 1; i >= 0; i--)
385 {
386 MemoryBlock* block = region->memBlocks[i];
387 if (ptr >= block)
388 {
389 RegionAllocHeader* header = (RegionAllocHeader*)((u8*)ptr - sizeof(RegionAllocHeader));
390 RegionAllocHeader* nextHeader = (RegionAllocHeader*)((u8*)header + header->size);
391 if ((u8*)nextHeader >= (u8*)block + region->blockSize)
392 {
393 nextHeader = nullptr;
394 }
395
396 assert(!header->free);
397 if (header->free)
398 {
399 TFE_System::logWrite(LOG_ERROR, "MemoryRegion", "Attempted to double free pointer %x in region '%s'.", ptr, region->name);
400 return;
401 }
402
403 VERIFY_MEMORY();
404 freeSlot(header, nextHeader, block);
405 VERIFY_MEMORY();
406 return;
407 }
408 }
409 }
410
411 u64 region_getMemoryUsed(MemoryRegion* region)
412 {

Callers 5

freeChunkedArrayFunction · 0.85
region_reallocFunction · 0.85
region_testFunction · 0.85
allocator_freeFunction · 0.85
allocator_deleteItemFunction · 0.85

Calls 2

logWriteFunction · 0.85
freeSlotFunction · 0.85

Tested by

no test coverage detected