diff --git a/Kernel/PerformanceManager.h b/Kernel/PerformanceManager.h index e4bef19db8..8fc164d93e 100644 --- a/Kernel/PerformanceManager.h +++ b/Kernel/PerformanceManager.h @@ -29,6 +29,15 @@ public: } } + inline static void add_process_exit_event(Process& process) + { + if (g_profiling_all_threads) { + VERIFY(g_global_perf_events); + [[maybe_unused]] auto rc = g_global_perf_events->append_with_eip_and_ebp( + process.pid(), 0, 0, 0, PERF_EVENT_PROCESS_EXIT, 0, 0, nullptr); + } + } + inline static void add_thread_created_event(Thread& thread) { if (auto* event_buffer = thread.process().current_perf_events_buffer()) { diff --git a/Kernel/Process.cpp b/Kernel/Process.cpp index d9df7ba326..0805480217 100644 --- a/Kernel/Process.cpp +++ b/Kernel/Process.cpp @@ -21,6 +21,7 @@ #include #include #include +#include #include #include #include @@ -245,11 +246,7 @@ Process::~Process() VERIFY(thread_count() == 0); // all threads should have been finalized VERIFY(!m_alarm_timer); - if (g_profiling_all_threads) { - VERIFY(g_global_perf_events); - [[maybe_unused]] auto rc = g_global_perf_events->append_with_eip_and_ebp( - pid(), 0, 0, 0, PERF_EVENT_PROCESS_EXIT, 0, 0, nullptr); - } + PerformanceManager::add_process_exit_event(*this); { ScopedSpinLock processes_lock(g_processes_lock);