diff --git a/NEWS.md b/NEWS.md index f4dd8c8600041..87623395d9b68 100644 --- a/NEWS.md +++ b/NEWS.md @@ -74,6 +74,7 @@ New library functions * `eachrsplit(string, pattern)` iterates split substrings right to left. * `Sys.username()` can be used to return the current user's username ([#51897]). * `wrap(Array, m::Union{MemoryRef{T}, Memory{T}}, dims)` which is the safe counterpart to `unsafe_wrap` ([#52049]). +* `GC.logging_enabled()` can be used to test whether GC logging has been enabled via `GC.enable_logging` ([#51647]). New library features -------------------- diff --git a/base/gcutils.jl b/base/gcutils.jl index ea39bc8ab6130..25f098e407223 100644 --- a/base/gcutils.jl +++ b/base/gcutils.jl @@ -262,4 +262,13 @@ function enable_logging(on::Bool=true) ccall(:jl_enable_gc_logging, Cvoid, (Cint,), on) end +""" + GC.logging_enabled() + +Return whether GC logging has been enabled via [`GC.enable_logging`](@ref). +""" +function logging_enabled() + ccall(:jl_is_gc_logging_enabled, Cint, ()) != 0 +end + end # module GC diff --git a/doc/src/base/base.md b/doc/src/base/base.md index 7172474b40b39..ee9cede4e6455 100644 --- a/doc/src/base/base.md +++ b/doc/src/base/base.md @@ -491,6 +491,7 @@ Base.GC.enable Base.GC.@preserve Base.GC.safepoint Base.GC.enable_logging +Base.GC.logging_enabled Meta.lower Meta.@lower Meta.parse(::AbstractString, ::Int) diff --git a/src/gc-debug.c b/src/gc-debug.c index b91bab876b11c..124b7da74dee1 100644 --- a/src/gc-debug.c +++ b/src/gc-debug.c @@ -1207,6 +1207,10 @@ JL_DLLEXPORT void jl_enable_gc_logging(int enable) { gc_logging_enabled = enable; } +JL_DLLEXPORT int jl_is_gc_logging_enabled(void) { + return gc_logging_enabled; +} + void _report_gc_finished(uint64_t pause, uint64_t freed, int full, int recollect, int64_t live_bytes) JL_NOTSAFEPOINT { if (!gc_logging_enabled) { return; diff --git a/src/gc.h b/src/gc.h index 60ed90fb3415b..4bb8828910e6c 100644 --- a/src/gc.h +++ b/src/gc.h @@ -726,6 +726,7 @@ void gc_count_pool(void); size_t jl_genericmemory_nbytes(jl_genericmemory_t *a) JL_NOTSAFEPOINT; JL_DLLEXPORT void jl_enable_gc_logging(int enable); +JL_DLLEXPORT int jl_is_gc_logging_enabled(void); JL_DLLEXPORT uint32_t jl_get_num_stack_mappings(void); void _report_gc_finished(uint64_t pause, uint64_t freed, int full, int recollect, int64_t live_bytes) JL_NOTSAFEPOINT; diff --git a/test/misc.jl b/test/misc.jl index aeef937cac9fa..11410a497a4f5 100644 --- a/test/misc.jl +++ b/test/misc.jl @@ -1343,8 +1343,10 @@ end open(tmppath, "w") do tmpio redirect_stderr(tmpio) do GC.enable_logging(true) + @test GC.logging_enabled() GC.gc() GC.enable_logging(false) + @test !GC.logging_enabled() end end @test occursin("GC: pause", read(tmppath, String))