From d6d235a111247bbae1be71eb7ed2feee4207bd0a Mon Sep 17 00:00:00 2001 From: taosang2 Date: Fri, 15 Dec 2023 10:38:06 -0500 Subject: [PATCH] SWDEV-435296 - Fix sporatic segment fault Fix sporatic segment fault in texture test via retaining image in texture object which references the image. The image will be released when the texture object is destroyed. Change-Id: Ic3fefa2d5dda6afebd1acd4d41ad310b138af6dd --- hipamd/src/hip_texture.cpp | 16 +++++----------- 1 file changed, 5 insertions(+), 11 deletions(-) diff --git a/hipamd/src/hip_texture.cpp b/hipamd/src/hip_texture.cpp index ddbcbfb058..51c53524df 100644 --- a/hipamd/src/hip_texture.cpp +++ b/hipamd/src/hip_texture.cpp @@ -241,8 +241,8 @@ hipError_t ihipCreateTextureObject(hipTextureObject_t* pTexObject, if (image == nullptr) { return hipErrorInvalidValue; } - } else if (image->parent()) { - image->retain(); // Because it will be released as a view in ihipDestroyTextureObject() + } else { + image->retain(); // will be released in ihipDestroyTextureObject() } break; } @@ -282,6 +282,8 @@ hipError_t ihipCreateTextureObject(hipTextureObject_t* pTexObject, if (image == nullptr) { return hipErrorInvalidValue; } + } else { + image->retain(); // will be released in ihipDestroyTextureObject() } break; } @@ -374,15 +376,7 @@ hipError_t ihipDestroyTextureObject(hipTextureObject_t texObject) { return hipErrorNotSupported; } - const hipResourceType type = texObject->resDesc.resType; - const bool isImageFromBuffer = (type == hipResourceTypeLinear) || (type == hipResourceTypePitch2D); - const bool isImageView = ((type == hipResourceTypeArray) || (type == hipResourceTypeMipmappedArray)) && - texObject->image->parent() != nullptr; - // If the texture object was created from an array, then the array owns the image SRD. - // Otherwise, if the texture object is a view, or was created from a buffer, then it owns the image SRD. - if (isImageFromBuffer || isImageView) { - texObject->image->release(); - } + texObject->image->release(); // The texture object always owns the sampler SRD. texObject->sampler->release();