3476f5b4d3
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.
40 lines
970 B
C++
40 lines
970 B
C++
// Copyright 2014 Citra Emulator Project
|
|
// Licensed under GPLv2 or any later version
|
|
// Refer to the license.txt file included.
|
|
|
|
#include "core/hle/kernel/handle_table.h"
|
|
#include "core/hle/kernel/kernel.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"
|
|
|
|
namespace Kernel {
|
|
|
|
std::atomic<u32> Object::next_object_id{0};
|
|
|
|
/// Initialize the kernel
|
|
void Init() {
|
|
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() {
|
|
// Free all kernel objects
|
|
g_handle_table.Clear();
|
|
|
|
Kernel::ThreadingShutdown();
|
|
|
|
Kernel::TimersShutdown();
|
|
Kernel::ResourceLimitsShutdown();
|
|
}
|
|
|
|
} // namespace Kernel
|