diff --git a/unified-runtime/source/common/logger/ur_logger_details.hpp b/unified-runtime/source/common/logger/ur_logger_details.hpp index 4ad97831fbe4c..c9bf4715c5407 100644 --- a/unified-runtime/source/common/logger/ur_logger_details.hpp +++ b/unified-runtime/source/common/logger/ur_logger_details.hpp @@ -53,6 +53,19 @@ class Logger { void log(const logger::LegacyMessage &p, ur_logger_level_t level, const char *filename, const char *lineno, const char *format, Args &&...args) { + // During process/library teardown this logger's owned sinks may already + // have been destroyed. Use a temporary stack sink instead. + if (isTearDowned) { + if (!isLegacySink && level < this->standardSinkLevel) { + return; + } + StderrSink(/*logger_name*/ "", /*skip_prefix*/ false, + /*skip_linebreak*/ false) + .log(level, filename, lineno, isLegacySink ? p.message : format, + std::forward(args)...); + return; + } + if (callbackSink && level >= this->callbackSinkLevel) { callbackSink->log(level, filename, lineno, format, args...); }