Destroy resource handle when created

When allocation is created and createResource is set we need to
remove resourceHandle instead of allocation handle list otherwise
in long running application (a lot of allocations) we will observe
memory leak.

Signed-off-by: Kamil Diedrich <kamil.diedrich@intel.com>
This commit is contained in:
Kamil Diedrich 2022-07-26 16:14:20 +00:00 committed by Compute-Runtime-Automation
parent cb18657cb8
commit 5a6a90aa0e
2 changed files with 19 additions and 1 deletions

View File

@ -811,6 +811,24 @@ TEST_F(WddmMemoryManagerTest, givenWddmMemoryManagerWhenFreeAllocFromSharedHandl
EXPECT_EQ(lastDestroyed, expectedDestroyHandle);
}
TEST_F(WddmMemoryManagerTest, givenWddmMemoryManagerWhenFreeAllocFromHostPtrIsCalledThenDestroyResourceHandle) {
auto size = 13u;
auto hostPtr = reinterpret_cast<const void *>(0x10001);
AllocationData allocationData;
allocationData.size = size;
allocationData.hostPtr = hostPtr;
auto allocation = static_cast<WddmAllocation *>(memoryManager->allocateGraphicsMemoryForNonSvmHostPtr(allocationData));
auto expectedDestroyHandle = allocation->resourceHandle;
EXPECT_NE(0u, expectedDestroyHandle);
auto lastDestroyed = getMockLastDestroyedResHandleFcn();
EXPECT_EQ(0u, lastDestroyed);
memoryManager->freeGraphicsMemory(allocation);
lastDestroyed = getMockLastDestroyedResHandleFcn();
EXPECT_EQ(lastDestroyed, expectedDestroyHandle);
}
TEST_F(WddmMemoryManagerTest, givenWddmMemoryManagerSizeZeroWhenCreateFromSharedHandleIsCalledThenUpdateSize) {
auto osHandle = 1u;
auto size = 4096u;

View File

@ -565,7 +565,7 @@ void WddmMemoryManager::freeGraphicsMemoryImpl(GraphicsAllocation *gfxAllocation
input->fragmentsStorage.fragmentCount > 0) {
cleanGraphicsMemoryCreatedFromHostPtr(gfxAllocation);
} else {
if (input->peekSharedHandle() || input->peekInternalHandle(nullptr) != 0) {
if (input->resourceHandle != 0) {
[[maybe_unused]] auto status = tryDeferDeletions(nullptr, 0, input->resourceHandle, gfxAllocation->getRootDeviceIndex());
DEBUG_BREAK_IF(!status);
} else {