diff --git a/unified-runtime/source/adapters/cuda/context.hpp b/unified-runtime/source/adapters/cuda/context.hpp index 0837907b4f5a7..984eb4d8beb63 100644 --- a/unified-runtime/source/adapters/cuda/context.hpp +++ b/unified-runtime/source/adapters/cuda/context.hpp @@ -107,14 +107,25 @@ struct ur_context_handle_t_ : ur::cuda::handle_base { UR_CHECK_ERROR(urAdapterRetain(ur::cuda::adapter)); }; - ~ur_context_handle_t_() { - if (MemoryPoolHost) { - umfPoolDestroy(MemoryPoolHost); + ~ur_context_handle_t_() noexcept { + try { + if (MemoryPoolHost) { + umfPoolDestroy(MemoryPoolHost); + } + if (MemoryProviderHost) { + umfMemoryProviderDestroy(MemoryProviderHost); + } + auto result = urAdapterRelease(ur::cuda::adapter); + if (result != UR_RESULT_SUCCESS) { + UR_LOG(ERR, "Failed to release adapter in context destructor: {}", + result); + } + assert(result == UR_RESULT_SUCCESS && + "Adapter release failed in context destructor"); + } catch (...) { + UR_LOG(ERR, "Exception in context destructor"); + assert(false && "Exception in context destructor"); } - if (MemoryProviderHost) { - umfMemoryProviderDestroy(MemoryProviderHost); - } - UR_CHECK_ERROR(urAdapterRelease(ur::cuda::adapter)); } void invokeExtendedDeleters() { diff --git a/unified-runtime/source/adapters/hip/context.hpp b/unified-runtime/source/adapters/hip/context.hpp index 120d5346d497f..f63239a066194 100644 --- a/unified-runtime/source/adapters/hip/context.hpp +++ b/unified-runtime/source/adapters/hip/context.hpp @@ -96,8 +96,19 @@ struct ur_context_handle_t_ : ur::hip::handle_base { UR_CHECK_ERROR(urAdapterRetain(ur::hip::adapter)); }; - ~ur_context_handle_t_() { - UR_CHECK_ERROR(urAdapterRelease(ur::hip::adapter)); + ~ur_context_handle_t_() noexcept { + try { + auto result = urAdapterRelease(ur::hip::adapter); + if (result != UR_RESULT_SUCCESS) { + UR_LOG(ERR, "Failed to release adapter in context destructor: {}", + result); + } + assert(result == UR_RESULT_SUCCESS && + "Adapter release failed in context destructor"); + } catch (...) { + UR_LOG(ERR, "Exception in context destructor"); + assert(false && "Exception in context destructor"); + } } ur_context_handle_t_(const ur_context_handle_t_ &) = delete;