From 1c3f85dff4fc59998b31a8555e75469ef21480d5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=B6nke=20Ludwig?= Date: Sat, 27 Jul 2024 14:08:29 +0200 Subject: [PATCH] Ensure that loggers never yield when processing log data. Doing so would break fundamental assumptions about not yielding within low level code that might very well perform logging. --- source/vibe/core/log.d | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/source/vibe/core/log.d b/source/vibe/core/log.d index 6140a2b..c2872da 100644 --- a/source/vibe/core/log.d +++ b/source/vibe/core/log.d @@ -1056,6 +1056,8 @@ unittest { // ensure arguments are evaluated lazily } private struct LogOutputRange { + import vibe.core.core : yieldLock; + LogLine info; ScopedLock!Logger* logger; @@ -1063,6 +1065,8 @@ private struct LogOutputRange { this(ref ScopedLock!Logger logger, string file, int line, LogLevel level) { + auto l = yieldLock(); + () @trusted { this.logger = &logger; } (); try { () @trusted { this.info.time = Clock.currTime(UTC()); }(); // not @safe as of 2.065 @@ -1088,6 +1092,8 @@ private struct LogOutputRange { void finalize() { + auto l = yieldLock(); + logger.endLine(); } @@ -1096,6 +1102,8 @@ private struct LogOutputRange { if (text.empty) return; + auto l = yieldLock(); + if (logger.multilineLogger) { logger.put(text); } else {