diff --git a/glslang/MachineIndependent/PoolAlloc.cpp b/glslang/MachineIndependent/PoolAlloc.cpp index 7d07a39986a0ec18894c3b506860c60643d052c0..84c40f4e79522aea79a5cf42921434e21e887fd5 100644 --- a/glslang/MachineIndependent/PoolAlloc.cpp +++ b/glslang/MachineIndependent/PoolAlloc.cpp @@ -202,14 +202,17 @@ void TPoolAllocator::pop() while (inUseList != page) { tHeader* nextInUse = inUseList->nextPage; - if (inUseList->pageCount > 1) { - inUseList->~tHeader(); // currently, just a debug allocation checker + size_t pageCount = inUseList->pageCount; + + // This technically ends the lifetime of the header as C++ object, + // but we will still control the memory and reuse it. + inUseList->~tHeader(); // currently, just a debug allocation checker + + if (pageCount > 1) { delete [] reinterpret_cast<char*>(inUseList); } else { inUseList->nextPage = freeList; freeList = inUseList; - // inUseList->~tHeader(); TODO: this should probably call the allocation checker, but not the destructor - // ...if the destructor actually overwrites nextPage, that would effect freeList->nextPage } inUseList = nextInUse; }