diff --git a/unified-runtime/source/adapters/level_zero/v2/memory.cpp b/unified-runtime/source/adapters/level_zero/v2/memory.cpp index 46b5a5b6fd129..77e9026e5e89e 100644 --- a/unified-runtime/source/adapters/level_zero/v2/memory.cpp +++ b/unified-runtime/source/adapters/level_zero/v2/memory.cpp @@ -220,7 +220,7 @@ void ur_integrated_buffer_handle_t::copyBackToHostIfNeeded() { if (result2 == UR_RESULT_SUCCESS) { writeBackPtr = nullptr; } else { - UR_LOG(ERR, "Failed to copy-back buffer data: {}", result2); + UR_LOG_SAFE(ERR, "Failed to copy-back buffer data: {}", result2); } } } @@ -326,8 +326,11 @@ ur_discrete_buffer_handle_t::~ur_discrete_buffer_handle_t() { return; auto srcPtr = getActiveDeviceAlloc(); - synchronousZeCopy(hContext, activeAllocationDevice, writeBackPtr, srcPtr, - getSize()); + auto ret = synchronousZeCopy(hContext, activeAllocationDevice, writeBackPtr, + srcPtr, getSize()); + if (ret != UR_RESULT_SUCCESS) { + UR_LOG_SAFE(ERR, "Failed to copy-back buffer data: {}", ret); + } } void *ur_discrete_buffer_handle_t::getActiveDeviceAlloc(size_t offset) { diff --git a/unified-runtime/source/common/logger/ur_logger.hpp b/unified-runtime/source/common/logger/ur_logger.hpp index 5f6023545066a..dc7f03d806c10 100644 --- a/unified-runtime/source/common/logger/ur_logger.hpp +++ b/unified-runtime/source/common/logger/ur_logger.hpp @@ -89,6 +89,18 @@ inline void init(const std::string &name) { get_logger(name.c_str()); } URLOG_L_(::logger::get_logger(), level, legacy_message, __VA_ARGS__) #define UR_LOG_L(logger, level, ...) URLOG_(logger, level, __VA_ARGS__) +// safe version of UR_LOG that catches exceptions from the logger +#define UR_LOG_SAFE(level, ...) \ + { \ + try { \ + UR_LOG(level, __VA_ARGS__); \ + } catch (const std::exception &e) { \ + std::fprintf(stderr, "Error during logging: %s\n", e.what()); \ + } catch (...) { \ + std::fprintf(stderr, "Unknown error during logging\n"); \ + } \ + } + inline void setLevel(ur_logger_level_t level) { get_logger().setLevel(level); } inline void setFlushLevel(ur_logger_level_t level) {