diff --git a/unified-runtime/source/adapters/level_zero/memory.cpp b/unified-runtime/source/adapters/level_zero/memory.cpp index eab949cdf988f..1a348c8ef9b6e 100644 --- a/unified-runtime/source/adapters/level_zero/memory.cpp +++ b/unified-runtime/source/adapters/level_zero/memory.cpp @@ -2341,6 +2341,11 @@ _ur_buffer::_ur_buffer(ur_context_handle_t Context, size_t Size, LastDeviceWithValidAllocation = Device; } +_ur_buffer::~_ur_buffer() { + if (isSubBuffer()) + ur::level_zero::urMemRelease(SubBuffer->Parent); +} + ur_result_t ur_mem_handle_t_::getZeHandle(char *&ZeHandle, access_mode_t mode, ur_device_handle_t Device, const ur_event_handle_t *phWaitEvents, diff --git a/unified-runtime/source/adapters/level_zero/memory.hpp b/unified-runtime/source/adapters/level_zero/memory.hpp index cc1639d90ce80..18b848f071400 100644 --- a/unified-runtime/source/adapters/level_zero/memory.hpp +++ b/unified-runtime/source/adapters/level_zero/memory.hpp @@ -127,6 +127,8 @@ struct _ur_buffer final : ur_mem_handle_t_ { _ur_buffer(ur_context_handle_t Context, size_t Size, ur_device_handle_t Device, char *ZeMemHandle, bool OwnZeMemHandle); + ~_ur_buffer(); + // Returns a pointer to the USM allocation representing this PI buffer // on the specified Device. If Device is nullptr then the returned // USM allocation is on the device where this buffer was used the latest.