mirror of
https://github.com/intel/compute-runtime.git
synced 2025-09-10 12:53:42 +08:00
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:

committed by
Compute-Runtime-Automation

parent
cb18657cb8
commit
5a6a90aa0e
@ -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;
|
||||
|
@ -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 {
|
||||
|
Reference in New Issue
Block a user