diff --git a/rocclr/device/rocm/rocmemory.cpp b/rocclr/device/rocm/rocmemory.cpp index d2229e025c..bee2110c43 100644 --- a/rocclr/device/rocm/rocmemory.cpp +++ b/rocclr/device/rocm/rocmemory.cpp @@ -1252,6 +1252,7 @@ bool Image::create(bool alloc_local) { permission_ = orgImage->permission_; deviceMemory_ = orgImage->deviceMemory_; hsaImageObject_ = orgImage->hsaImageObject_; + ownsHsaImageObject_ = false; return true; } @@ -1490,7 +1491,7 @@ void Image::destroy() { delete copyImageBuffer_; - if (hsaImageObject_.handle != 0) { + if (hsaImageObject_.handle != 0 && ownsHsaImageObject_) { hsa_status_t status = hsa_ext_image_destroy(dev().getBackendDevice(), hsaImageObject_); assert(status == HSA_STATUS_SUCCESS); } diff --git a/rocclr/device/rocm/rocmemory.hpp b/rocclr/device/rocm/rocmemory.hpp index c6f41a5750..03d434d8f9 100644 --- a/rocclr/device/rocm/rocmemory.hpp +++ b/rocclr/device/rocm/rocmemory.hpp @@ -250,6 +250,7 @@ class Image : public roc::Memory { hsa_access_permission_t permission_; hsa_ext_image_data_info_t deviceImageInfo_; hsa_ext_image_t hsaImageObject_; + bool ownsHsaImageObject_ = true; void* originalDeviceMemory_; amd::Image* copyImageBuffer_ = nullptr;