Skip to content

Commit f83a84c

Browse files
committed
Cut backedges to CoreLogging.shouldlog and CoreLogging.min_enabled_level
1 parent 41264e4 commit f83a84c

File tree

1 file changed

+11
-2
lines changed

1 file changed

+11
-2
lines changed

base/logging.jl

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,15 @@ logger type.
7171
catch_exceptions(logger) = true
7272

7373

74+
# Prevent invalidation when packages define custom loggers
75+
# Using invoke in combination with @nospecialize eliminates backedges to these methods
76+
function _invoked_shouldlog(logger, level, _module, group, id)
77+
@nospecialize
78+
invoke(shouldlog, Tuple{typeof(logger), typeof(level), typeof(_module), typeof(group), typeof(id)}, logger, level, _module, group, id)
79+
end
80+
81+
_invoked_min_enabled_level(@nospecialize(logger)) = invoke(min_enabled_level, Tuple{typeof(logger)}, logger)
82+
7483

7584
"""
7685
NullLogger()
@@ -315,7 +324,7 @@ function logmsg_code(_module, file, line, level, message, exs...)
315324
id = $id
316325
# Second chance at an early bail-out (before computing the message),
317326
# based on arbitrary logger-specific logic.
318-
if shouldlog(logger, level, _module, group, id)
327+
if _invoked_shouldlog(logger, level, _module, group, id)
319328
file = $file
320329
line = $line
321330
try
@@ -374,7 +383,7 @@ struct LogState
374383
logger::AbstractLogger
375384
end
376385

377-
LogState(logger) = LogState(LogLevel(min_enabled_level(logger)), logger)
386+
LogState(logger) = LogState(LogLevel(_invoked_min_enabled_level(logger)), logger)
378387

379388
function current_logstate()
380389
logstate = current_task().logstate

0 commit comments

Comments
 (0)