mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2024-09-21 10:19:03 +03:00
d1f265e851
This commit moves the allocation of the resources required for VMObject from its constructors to the constructors of its child classes. We're making this change to give the child classes the chance to expose the fallibility of the allocation.
52 lines
1.3 KiB
C++
52 lines
1.3 KiB
C++
/*
|
|
* Copyright (c) 2018-2021, Andreas Kling <kling@serenityos.org>
|
|
*
|
|
* SPDX-License-Identifier: BSD-2-Clause
|
|
*/
|
|
|
|
#include <AK/Singleton.h>
|
|
#include <Kernel/Memory/MemoryManager.h>
|
|
#include <Kernel/Memory/VMObject.h>
|
|
|
|
namespace Kernel::Memory {
|
|
|
|
static Singleton<SpinlockProtected<VMObject::AllInstancesList>> s_all_instances;
|
|
|
|
SpinlockProtected<VMObject::AllInstancesList>& VMObject::all_instances()
|
|
{
|
|
return s_all_instances;
|
|
}
|
|
|
|
ErrorOr<FixedArray<RefPtr<PhysicalPage>>> VMObject::try_clone_physical_pages() const
|
|
{
|
|
return m_physical_pages.try_clone();
|
|
}
|
|
|
|
FixedArray<RefPtr<PhysicalPage>> VMObject::must_clone_physical_pages_but_fixme_should_propagate_errors() const
|
|
{
|
|
return MUST(try_clone_physical_pages());
|
|
}
|
|
|
|
ErrorOr<FixedArray<RefPtr<PhysicalPage>>> VMObject::try_create_physical_pages(size_t size)
|
|
{
|
|
return FixedArray<RefPtr<PhysicalPage>>::try_create(ceil_div(size, static_cast<size_t>(PAGE_SIZE)));
|
|
}
|
|
|
|
FixedArray<RefPtr<PhysicalPage>> VMObject::must_create_physical_pages_but_fixme_should_propagate_errors(size_t size)
|
|
{
|
|
return MUST(try_create_physical_pages(size));
|
|
}
|
|
|
|
VMObject::VMObject(FixedArray<RefPtr<PhysicalPage>>&& new_physical_pages)
|
|
: m_physical_pages(move(new_physical_pages))
|
|
{
|
|
all_instances().with([&](auto& list) { list.append(*this); });
|
|
}
|
|
|
|
VMObject::~VMObject()
|
|
{
|
|
VERIFY(m_regions.is_empty());
|
|
}
|
|
|
|
}
|