/* * Copyright (c) 2022, Liav A. * * SPDX-License-Identifier: BSD-2-Clause */ #pragma once #include #include #include #include #include #include #include #include #include #include #include namespace Kernel { class JailManagement; AK_TYPEDEF_DISTINCT_ORDERED_ID(u64, JailIndex); class Jail : public RefCounted { friend class JailManagement; public: static ErrorOr> create(Badge, NonnullOwnPtr, JailIndex); StringView name() const { return m_name->view(); } JailIndex index() const { return m_index; } void detach(Badge); SpinlockProtected& attach_count() { return m_attach_count; } private: Jail(NonnullOwnPtr, JailIndex); NonnullOwnPtr m_name; JailIndex const m_index; IntrusiveListNode> m_jail_list_node; SpinlockProtected m_attach_count { LockRank::None, 0 }; }; }