MCPcopy Create free account
hub / github.com/Bananymous/banan-os / cleanup_function

Method cleanup_function

kernel/kernel/Process.cpp:392–427  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

390 void Process::cleanup_function(Thread* thread)
391 {
392 {
393 SpinLockGuard _(s_process_lock);
394 for (size_t i = 0; i < s_processes.size(); i++)
395 {
396 if (s_processes[i] != this)
397 continue;
398 s_processes.remove(i);
399 break;
400 }
401 for (auto it = s_alarm_processes.begin(); it != s_alarm_processes.end();)
402 {
403 if (*it == this)
404 it = s_alarm_processes.remove(it);
405 else
406 it++;
407 }
408 }
409
410 m_exited_threads.clear();
411
412 ProcFileSystem::get().on_process_delete(*this);
413
414 m_process_lock.lock();
415 m_memory_region_lock.wr_lock();
416
417 m_open_file_descriptors.close_all();
418
419 m_root_file = {};
420 m_working_directory = {};
421
422 // NOTE: We must unmap ranges while the page table is still alive
423 m_mapped_regions.clear();
424
425 // After we give our page table to the thread, we cannot get rescheduled
426 Processor::set_interrupt_state(InterruptState::Disabled);
427 thread->give_keep_alive_page_table(BAN::move(m_page_table));
428 }
429
430 bool Process::on_thread_exit(Thread& thread)

Callers 1

setup_process_cleanupMethod · 0.80

Calls 10

on_process_deleteMethod · 0.80
wr_lockMethod · 0.80
close_allMethod · 0.80
sizeMethod · 0.45
removeMethod · 0.45
beginMethod · 0.45
endMethod · 0.45
clearMethod · 0.45
lockMethod · 0.45

Tested by

no test coverage detected