Kernel: Reset profiling state on exec() (but keep it going)

We now log the new executable on exec() and throw away all the samples
we've accumulated so far. But profiling keeps going.
This commit is contained in:
Andreas Kling 2020-02-22 10:54:50 +01:00
parent 647d0b9e0f
commit d7a13dbaa7
Notes: sideshowbarker 2024-07-19 09:10:37 +09:00
3 changed files with 10 additions and 0 deletions

View file

@ -1015,6 +1015,9 @@ int Process::do_exec(NonnullRefPtr<FileDescription> main_program_description, Ve
kprintf("Process %u (%s) exec'd %s @ %p\n", pid(), name().characters(), path.characters(), tss.eip);
#endif
if (is_profiling())
Profiling::did_exec(path);
new_main_thread->set_state(Thread::State::Skip1SchedulerPass);
big_lock().force_unlock_if_locked();
return 0;

View file

@ -90,6 +90,12 @@ void stop()
s_process = nullptr;
}
void did_exec(const String& new_executable_path)
{
executable_path() = new_executable_path;
s_next_slot_index = 0;
}
void for_each_sample(Function<void(Sample&)> callback)
{
for (size_t i = 0; i < s_next_slot_index; ++i) {

View file

@ -51,6 +51,7 @@ extern String& executable_path();
Sample& next_sample_slot();
void start(Process&);
void stop();
void did_exec(const String& new_executable_path);
void for_each_sample(Function<void(Sample&)>);
}