mirror of
https://github.com/yuzu-mirror/yuzu
synced 2024-12-22 17:53:10 +00:00
cb198d7985
Within the kernel, shared memory and transfer memory facilities exist as completely different kernel objects. They also have different validity checking as well. Therefore, we shouldn't be treating the two as the same kind of memory. They also differ in terms of their behavioral aspect as well. Shared memory is intended for sharing memory between processes, while transfer memory is intended to be for transferring memory to other processes. This breaks out the handling for transfer memory into its own class and treats it as its own kernel object. This is also important when we consider resource limits as well. Particularly because transfer memory is limited by the resource limit value set for it. While we currently don't handle resource limit testing against objects yet (but we do allow setting them), this will make implementing that behavior much easier in the future, as we don't need to distinguish between shared memory and transfer memory allocations in the same place.
38 lines
996 B
C++
38 lines
996 B
C++
// Copyright 2018 Citra Emulator Project
|
|
// Licensed under GPLv2 or any later version
|
|
// Refer to the license.txt file included.
|
|
|
|
#include "common/assert.h"
|
|
#include "core/hle/kernel/kernel.h"
|
|
#include "core/hle/kernel/object.h"
|
|
|
|
namespace Kernel {
|
|
|
|
Object::Object(KernelCore& kernel) : kernel{kernel}, object_id{kernel.CreateNewObjectID()} {}
|
|
Object::~Object() = default;
|
|
|
|
bool Object::IsWaitable() const {
|
|
switch (GetHandleType()) {
|
|
case HandleType::ReadableEvent:
|
|
case HandleType::Thread:
|
|
case HandleType::Process:
|
|
case HandleType::ServerPort:
|
|
case HandleType::ServerSession:
|
|
return true;
|
|
|
|
case HandleType::Unknown:
|
|
case HandleType::WritableEvent:
|
|
case HandleType::SharedMemory:
|
|
case HandleType::TransferMemory:
|
|
case HandleType::AddressArbiter:
|
|
case HandleType::ResourceLimit:
|
|
case HandleType::ClientPort:
|
|
case HandleType::ClientSession:
|
|
return false;
|
|
}
|
|
|
|
UNREACHABLE();
|
|
return false;
|
|
}
|
|
|
|
} // namespace Kernel
|