/* static */ void GCAlloc::VerifyFreeBlockIntegrity(const void* item, uint32_t size) { // go through every item on the free list and make sure it wasn't written to // after being poisoned. while(item) { #ifdef MMGC_64BIT int n = (size >> 2) - 3; #else int n = (size >> 2) - 1; #endif int startIndex = (int)((uint32_t*)item - (uint32_t*)GetRealPointer(item)); for(int i=startIndex; i<n; i++) { uint32_t data = ((uint32_t*)item)[i]; if(data != 0xbabababa && data != 0xcacacaca) { ReportDeletedMemoryWrite(item); break; } } // next free item item = *((const void**)item); } }
/* static */ void FixedAlloc::VerifyFreeBlockIntegrity(void* item, uint32_t size) { while(item) { #ifdef MMGC_64BIT int n = (size >> 2) - 3; #else int n = (size >> 2) - 1; #endif int startIndex = (int)((uint32_t*)item - (uint32_t*)GetRealPointer(item)); for(int i=startIndex; i<n; i++) { uint32_t data = ((uint32_t*)item)[i]; if(data != uint32_t(GCHeap::FXFreedPoison)) { ReportDeletedMemoryWrite(item); break; } } // next free item item = FLNext(item); } }