ladybird/Kernel/Memory/SharedInodeVMObject.h
creator1creeper1 2a4e410b63 Kernel: Make SharedInodeVMObject construction OOM-aware
This commit moves the allocation of the resources required for
SharedInodeVMObject from its constructors to its factory functions.

We're making this change to expose the fallibility of the allocation.
2022-01-15 22:16:00 +02:00

34 lines
988 B
C++

/*
* Copyright (c) 2018-2020, Andreas Kling <kling@serenityos.org>
*
* SPDX-License-Identifier: BSD-2-Clause
*/
#pragma once
#include <Kernel/Memory/InodeVMObject.h>
#include <Kernel/UnixTypes.h>
namespace Kernel::Memory {
class SharedInodeVMObject final : public InodeVMObject {
AK_MAKE_NONMOVABLE(SharedInodeVMObject);
public:
static ErrorOr<NonnullRefPtr<SharedInodeVMObject>> try_create_with_inode(Inode&);
virtual ErrorOr<NonnullRefPtr<VMObject>> try_clone() override;
ErrorOr<void> sync(off_t offset_in_pages = 0, size_t pages = -1);
private:
virtual bool is_shared_inode() const override { return true; }
explicit SharedInodeVMObject(Inode&, FixedArray<RefPtr<PhysicalPage>>&&);
explicit SharedInodeVMObject(SharedInodeVMObject const&, FixedArray<RefPtr<PhysicalPage>>&&);
virtual StringView class_name() const override { return "SharedInodeVMObject"sv; }
SharedInodeVMObject& operator=(SharedInodeVMObject const&) = delete;
};
}