From 79bda80049f4a5539ab010fb214577a28c1713c4 Mon Sep 17 00:00:00 2001 From: marandje Date: Thu, 4 Sep 2025 17:59:18 +0200 Subject: [PATCH] SWDEV-549686 - Resolve memory leaks in texture unit-tests (#711) --- projects/clr/hipamd/src/hip_texture.cpp | 16 +++++++++------- .../catch/unit/texture/hipBindTexture2D.cc | 2 ++ .../unit/texture/hipTex1DFetchCheckModes.cc | 1 + .../catch/unit/texture/hipTexObjPitch.cc | 1 + .../catch/unit/texture/hipTexObjectCreate.cc | 1 - .../catch/unit/texture/hipTexRefSetAddress.cc | 3 +++ 6 files changed, 16 insertions(+), 8 deletions(-) diff --git a/projects/clr/hipamd/src/hip_texture.cpp b/projects/clr/hipamd/src/hip_texture.cpp index ac6a4bbc94..e96d542397 100644 --- a/projects/clr/hipamd/src/hip_texture.cpp +++ b/projects/clr/hipamd/src/hip_texture.cpp @@ -200,16 +200,18 @@ hipError_t ihipCreateTextureObject(hipTextureObject_t* pTexObject, const hipReso mipFilterMode = hip::getCLFilterMode(pTexDesc->mipmapFilterMode); } - amd::Sampler* sampler = new amd::Sampler( - *hip::getCurrentDevice()->asContext(), pTexDesc->normalizedCoords, addressMode, filterMode, - mipFilterMode, pTexDesc->minMipmapLevelClamp, pTexDesc->maxMipmapLevelClamp); + auto sampler_deleter = [](amd::Sampler* s) { s->release(); }; + std::unique_ptr sampler( + new amd::Sampler(*hip::getCurrentDevice()->asContext(), pTexDesc->normalizedCoords, + addressMode, filterMode, mipFilterMode, pTexDesc->minMipmapLevelClamp, + pTexDesc->maxMipmapLevelClamp), + sampler_deleter); - if (sampler == nullptr) { + if (sampler.get() == nullptr) { return hipErrorOutOfMemory; } - if (!sampler->create()) { - delete sampler; + if (!sampler.get()->create()) { return hipErrorOutOfMemory; } @@ -370,7 +372,7 @@ hipError_t ihipCreateTextureObject(hipTextureObject_t* pTexObject, const hipReso return hipErrorOutOfMemory; } *pTexObject = new (texObjectBuffer) - __hip_texture{image, sampler, *pResDesc, *pTexDesc, + __hip_texture{image, sampler.release(), *pResDesc, *pTexDesc, (pResViewDesc != nullptr) ? *pResViewDesc : hipResourceViewDesc{}}; return hipSuccess; diff --git a/projects/hip-tests/catch/unit/texture/hipBindTexture2D.cc b/projects/hip-tests/catch/unit/texture/hipBindTexture2D.cc index 266325d3fd..15ec24c869 100644 --- a/projects/hip-tests/catch/unit/texture/hipBindTexture2D.cc +++ b/projects/hip-tests/catch/unit/texture/hipBindTexture2D.cc @@ -122,6 +122,8 @@ TEST_CASE("Unit_hipBindTexture2D_Negative") { hipBindTexture2D(&texture_offset, &tex, device_ptr, &tex.channelDesc, SIZE_W, SIZE_H, 0), hipErrorInvalidValue); } + + HIP_CHECK(hipFree(device_ptr)); } #endif // __HIP_PLATFORM_AMD__ || CUDA_VERSION < CUDA_12000 diff --git a/projects/hip-tests/catch/unit/texture/hipTex1DFetchCheckModes.cc b/projects/hip-tests/catch/unit/texture/hipTex1DFetchCheckModes.cc index 9972fcb739..e152ee4515 100644 --- a/projects/hip-tests/catch/unit/texture/hipTex1DFetchCheckModes.cc +++ b/projects/hip-tests/catch/unit/texture/hipTex1DFetchCheckModes.cc @@ -99,6 +99,7 @@ static void runTest(hipTextureAddressMode addressMode, hipTextureFilterMode filt HIP_CHECK(hipDestroyTextureObject(texObj)); HIP_CHECK(hipFree(texBuf)); HIP_CHECK(hipFree(texBufOut)); + HIP_CHECK(hipCtxDestroy(HipContext)); } diff --git a/projects/hip-tests/catch/unit/texture/hipTexObjPitch.cc b/projects/hip-tests/catch/unit/texture/hipTexObjPitch.cc index c60c7cad31..abdac1341d 100644 --- a/projects/hip-tests/catch/unit/texture/hipTexObjPitch.cc +++ b/projects/hip-tests/catch/unit/texture/hipTexObjPitch.cc @@ -119,6 +119,7 @@ TEMPLATE_TEST_CASE("Unit_hipTexObjPitch_texture2D", "", char, unsigned char, sho delete[] B; HIP_CHECK(hipFree(devPtrA)); HIP_CHECK(hipFree(devPtrB)); + HIP_CHECK(hipDestroyTextureObject(texObj)); } /** diff --git a/projects/hip-tests/catch/unit/texture/hipTexObjectCreate.cc b/projects/hip-tests/catch/unit/texture/hipTexObjectCreate.cc index b7da3afb51..39f4c98f4b 100644 --- a/projects/hip-tests/catch/unit/texture/hipTexObjectCreate.cc +++ b/projects/hip-tests/catch/unit/texture/hipTexObjectCreate.cc @@ -506,7 +506,6 @@ TEST_CASE("Unit_TexObjectCreate_TypePitch2D_EdgeCases") { hipErrorInvalidValue); } - HIP_CHECK(hipTexObjectDestroy(tex_object)); HIP_CHECK(hipFree(tex_buffer)); CTX_DESTROY(); } diff --git a/projects/hip-tests/catch/unit/texture/hipTexRefSetAddress.cc b/projects/hip-tests/catch/unit/texture/hipTexRefSetAddress.cc index e2f406e3ad..8d3a3caa19 100644 --- a/projects/hip-tests/catch/unit/texture/hipTexRefSetAddress.cc +++ b/projects/hip-tests/catch/unit/texture/hipTexRefSetAddress.cc @@ -68,6 +68,9 @@ TEST_CASE("Unit_hipTexRefSetAddress_Positive") { HIP_CHECK( hipTexRefSetAddress(&offset, tex_ref, reinterpret_cast(tex_buffer), 0)); } + + HIP_CHECK(hipModuleUnload(module)); + HIP_CHECK(hipFree(tex_buffer)); } TEST_CASE("Unit_hipTexRefSetAddress_Negative") {