/* * Copyright (c) 2024, Andrew Kaster * * SPDX-License-Identifier: BSD-2-Clause */ #pragma once #include #if !defined(AK_OS_MACH) # error "This file is only for Mach kernel-based OS's" #endif #include #include #include #include namespace Ladybird { class MachPortServer { public: MachPortServer(); ~MachPortServer(); void start(); void stop(); bool is_initialized(); Function on_receive_child_mach_port; struct BackingStoresMessage { pid_t pid { -1 }; u64 page_id { 0 }; i32 front_backing_store_id { 0 }; i32 back_backing_store_id { 0 }; Core::MachPort front_backing_store_port; Core::MachPort back_backing_store_port; }; Function on_receive_backing_stores; ByteString const& server_port_name() const { return m_server_port_name; } private: void thread_loop(); ErrorOr allocate_server_port(); NonnullRefPtr m_thread; ByteString const m_server_port_name; Core::MachPort m_server_port_recv_right; Core::MachPort m_server_port_send_right; Atomic m_should_stop { false }; }; }