c47e1db46d
Despite being covered by a global mutex, we should still ensure that the class handles its reference counts properly. This avoids potential shenanigans when it comes to data races. Given this is the root object that drives quite a bit of the kernel object hierarchy, ensuring we always have the correct behavior (and no races) is a good thing.
48 lines
1.2 KiB
C++
48 lines
1.2 KiB
C++
// Copyright 2014 Citra Emulator Project
|
|
// Licensed under GPLv2 or any later version
|
|
// Refer to the license.txt file included.
|
|
|
|
#include "core/hle/config_mem.h"
|
|
#include "core/hle/kernel/handle_table.h"
|
|
#include "core/hle/kernel/kernel.h"
|
|
#include "core/hle/kernel/memory.h"
|
|
#include "core/hle/kernel/process.h"
|
|
#include "core/hle/kernel/resource_limit.h"
|
|
#include "core/hle/kernel/thread.h"
|
|
#include "core/hle/kernel/timer.h"
|
|
#include "core/hle/shared_page.h"
|
|
|
|
namespace Kernel {
|
|
|
|
std::atomic<u32> Object::next_object_id{0};
|
|
|
|
/// Initialize the kernel
|
|
void Init(u32 system_mode) {
|
|
ConfigMem::Init();
|
|
|
|
Kernel::MemoryInit(system_mode);
|
|
|
|
Kernel::ResourceLimitsInit();
|
|
Kernel::ThreadingInit();
|
|
Kernel::TimersInit();
|
|
|
|
Object::next_object_id = 0;
|
|
// TODO(Subv): Start the process ids from 10 for now, as lower PIDs are
|
|
// reserved for low-level services
|
|
Process::next_process_id = 10;
|
|
}
|
|
|
|
/// Shutdown the kernel
|
|
void Shutdown() {
|
|
g_handle_table.Clear(); // Free all kernel objects
|
|
|
|
Kernel::ThreadingShutdown();
|
|
g_current_process = nullptr;
|
|
|
|
Kernel::TimersShutdown();
|
|
Kernel::ResourceLimitsShutdown();
|
|
Kernel::MemoryShutdown();
|
|
}
|
|
|
|
} // namespace Kernel
|