From bba94804c27e031646634e72effaed650a8bf317 Mon Sep 17 00:00:00 2001 From: Space Meyer Date: Mon, 8 Apr 2024 02:19:23 +0200 Subject: [PATCH] Kernel: Deduplicate backtrace printing --- Kernel/Tasks/Scheduler.cpp | 7 +------ Kernel/Tasks/Thread.cpp | 17 +++++++++++------ Kernel/Tasks/Thread.h | 1 + 3 files changed, 13 insertions(+), 12 deletions(-) diff --git a/Kernel/Tasks/Scheduler.cpp b/Kernel/Tasks/Scheduler.cpp index c3f6bbf17b..2fa7fb6793 100644 --- a/Kernel/Tasks/Scheduler.cpp +++ b/Kernel/Tasks/Scheduler.cpp @@ -552,12 +552,7 @@ void dump_thread_list(bool with_stack_traces) }); #endif if (with_stack_traces) { - auto trace_or_error = thread.backtrace(); - if (!trace_or_error.is_error()) { - auto trace = trace_or_error.release_value(); - dbgln("Backtrace:"); - kernelputstr(trace->characters(), trace->length()); - } + thread.print_backtrace(); } return IterationDecision::Continue; }); diff --git a/Kernel/Tasks/Thread.cpp b/Kernel/Tasks/Thread.cpp index 505a9dc43a..8596c3a6c7 100644 --- a/Kernel/Tasks/Thread.cpp +++ b/Kernel/Tasks/Thread.cpp @@ -561,12 +561,7 @@ void Thread::finalize() } if (m_dump_backtrace_on_finalization) { - auto trace_or_error = backtrace(); - if (!trace_or_error.is_error()) { - auto trace = trace_or_error.release_value(); - dbgln("Backtrace:"); - kernelputstr(trace->characters(), trace->length()); - } + print_backtrace(); } drop_thread_count(); @@ -1350,6 +1345,16 @@ ErrorOr> Thread::backtrace() return KString::try_create(builder.string_view()); } +void Thread::print_backtrace() +{ + auto trace_or_error = this->backtrace(); + if (!trace_or_error.is_error()) { + auto trace = trace_or_error.release_value(); + dbgln("Backtrace:"); + kernelputstr(trace->characters(), trace->length()); + } +} + ErrorOr Thread::make_thread_specific_region(Badge) { return process().m_master_tls.with([&](auto& master_tls) -> ErrorOr { diff --git a/Kernel/Tasks/Thread.h b/Kernel/Tasks/Thread.h index b1a23687ab..a1c47db88d 100644 --- a/Kernel/Tasks/Thread.h +++ b/Kernel/Tasks/Thread.h @@ -1069,6 +1069,7 @@ public: void set_allocation_enabled(bool value) { m_allocation_enabled = value; } ErrorOr> backtrace(); + void print_backtrace(); Blocker const* blocker() const { return m_blocker; } Kernel::Mutex const* blocking_mutex() const { return m_blocking_mutex; }