diff --git a/runtime/hsa-runtime/core/runtime/hsa_ext_amd.cpp b/runtime/hsa-runtime/core/runtime/hsa_ext_amd.cpp index 310145fc4c..5d7eac6cb2 100644 --- a/runtime/hsa-runtime/core/runtime/hsa_ext_amd.cpp +++ b/runtime/hsa-runtime/core/runtime/hsa_ext_amd.cpp @@ -807,9 +807,13 @@ hsa_status_t hsa_amd_interop_map_buffer(uint32_t num_agents, core::Agent** core_agents = short_agents; if (num_agents > tinyArraySize) { core_agents = new core::Agent* [num_agents]; - if (core_agents == NULL) return HSA_STATUS_ERROR_OUT_OF_RESOURCES; + if (core_agents == nullptr) return HSA_STATUS_ERROR_OUT_OF_RESOURCES; } + MAKE_SCOPE_GUARD([&]() { + if (num_agents > tinyArraySize) delete[] core_agents; + }); + for (uint32_t i = 0; i < num_agents; i++) { core::Agent* device = core::Agent::Convert(agents[i]); IS_VALID(device); @@ -820,7 +824,6 @@ hsa_status_t hsa_amd_interop_map_buffer(uint32_t num_agents, num_agents, core_agents, interop_handle, flags, size, ptr, metadata_size, metadata); - if (num_agents > tinyArraySize) delete[] core_agents; return ret; CATCH; }