diff --git a/Kernel/Bus/VirtIO/ConsolePort.cpp b/Kernel/Bus/VirtIO/ConsolePort.cpp index 2ff8a18674..82d694b8c0 100644 --- a/Kernel/Bus/VirtIO/ConsolePort.cpp +++ b/Kernel/Bus/VirtIO/ConsolePort.cpp @@ -161,7 +161,7 @@ ErrorOr ConsolePort::write(OpenFileDescription& desc, u64, UserOrKernelB return total_bytes_copied; } -ErrorOr> ConsolePort::open(int options) +ErrorOr> ConsolePort::open(int options) { if (!m_open) m_console.send_open_control_message(m_port, true); diff --git a/Kernel/Bus/VirtIO/ConsolePort.h b/Kernel/Bus/VirtIO/ConsolePort.h index b738eb82cc..ac6f51980a 100644 --- a/Kernel/Bus/VirtIO/ConsolePort.h +++ b/Kernel/Bus/VirtIO/ConsolePort.h @@ -44,7 +44,7 @@ private: virtual ErrorOr read(OpenFileDescription&, u64, UserOrKernelBuffer&, size_t) override; virtual bool can_write(OpenFileDescription const&, u64) const override; virtual ErrorOr write(OpenFileDescription&, u64, UserOrKernelBuffer const&, size_t) override; - virtual ErrorOr> open(int options) override; + virtual ErrorOr> open(int options) override; static unsigned next_device_id; u16 m_receive_queue {}; diff --git a/Kernel/Coredump.cpp b/Kernel/Coredump.cpp index 15e444763e..ccc0131ea4 100644 --- a/Kernel/Coredump.cpp +++ b/Kernel/Coredump.cpp @@ -74,7 +74,7 @@ ErrorOr> Coredump::try_create(NonnullLockRefPtr return adopt_nonnull_own_or_enomem(new (nothrow) Coredump(move(process), move(description), move(regions))); } -Coredump::Coredump(NonnullLockRefPtr process, NonnullLockRefPtr description, Vector regions) +Coredump::Coredump(NonnullLockRefPtr process, NonnullRefPtr description, Vector regions) : m_process(move(process)) , m_description(move(description)) , m_regions(move(regions)) @@ -93,7 +93,7 @@ Coredump::Coredump(NonnullLockRefPtr process, NonnullLockRefPtr> Coredump::try_create_target_file(Process const& process, StringView output_path) +ErrorOr> Coredump::try_create_target_file(Process const& process, StringView output_path) { auto output_directory = KLexicalPath::dirname(output_path); auto dump_directory = TRY(VirtualFileSystem::the().open_directory(Process::current().credentials(), output_directory, VirtualFileSystem::the().root_custody())); diff --git a/Kernel/Coredump.h b/Kernel/Coredump.h index 2b9f7127f7..29b7d5ef7f 100644 --- a/Kernel/Coredump.h +++ b/Kernel/Coredump.h @@ -65,8 +65,8 @@ private: VirtualAddress m_vaddr; }; - Coredump(NonnullLockRefPtr, NonnullLockRefPtr, Vector); - static ErrorOr> try_create_target_file(Process const&, StringView output_path); + Coredump(NonnullLockRefPtr, NonnullRefPtr, Vector); + static ErrorOr> try_create_target_file(Process const&, StringView output_path); ErrorOr write_elf_header(); ErrorOr write_program_headers(size_t notes_size); @@ -80,7 +80,7 @@ private: ErrorOr create_notes_metadata_data(auto&) const; NonnullLockRefPtr m_process; - NonnullLockRefPtr m_description; + NonnullRefPtr m_description; size_t m_num_program_headers { 0 }; Vector m_regions; }; diff --git a/Kernel/Devices/Device.cpp b/Kernel/Devices/Device.cpp index a8dff9914e..bb0edd497e 100644 --- a/Kernel/Devices/Device.cpp +++ b/Kernel/Devices/Device.cpp @@ -59,7 +59,7 @@ ErrorOr> Device::pseudo_path(OpenFileDescription const&) return KString::formatted("device:{},{}", major(), minor()); } -ErrorOr> Device::open(int options) +ErrorOr> Device::open(int options) { TRY(Process::current().jail().with([&](auto const& my_jail) -> ErrorOr { if (my_jail && !is_openable_by_jailed_processes()) diff --git a/Kernel/Devices/Device.h b/Kernel/Devices/Device.h index a7d0369927..32c8874559 100644 --- a/Kernel/Devices/Device.h +++ b/Kernel/Devices/Device.h @@ -43,7 +43,7 @@ public: MinorNumber minor() const { return m_minor; } virtual ErrorOr> pseudo_path(OpenFileDescription const&) const override; - virtual ErrorOr> open(int options) override; + virtual ErrorOr> open(int options) override; UserID uid() const { return m_uid; } GroupID gid() const { return m_gid; } diff --git a/Kernel/Devices/KCOVDevice.cpp b/Kernel/Devices/KCOVDevice.cpp index 86f34b1a3f..b9e1eef277 100644 --- a/Kernel/Devices/KCOVDevice.cpp +++ b/Kernel/Devices/KCOVDevice.cpp @@ -65,7 +65,7 @@ void KCOVDevice::free_process() delete kcov_instance; } -ErrorOr> KCOVDevice::open(int options) +ErrorOr> KCOVDevice::open(int options) { auto pid = Process::current().pid(); if (proc_instance->get(pid).has_value()) diff --git a/Kernel/Devices/KCOVDevice.h b/Kernel/Devices/KCOVDevice.h index 40d7e70872..8564c00b02 100644 --- a/Kernel/Devices/KCOVDevice.h +++ b/Kernel/Devices/KCOVDevice.h @@ -23,7 +23,7 @@ public: // ^File ErrorOr> vmobject_for_mmap(Process&, Memory::VirtualRange const&, u64& offset, bool shared) override; - ErrorOr> open(int options) override; + virtual ErrorOr> open(int options) override; protected: KCOVDevice(); diff --git a/Kernel/Devices/SelfTTYDevice.cpp b/Kernel/Devices/SelfTTYDevice.cpp index a01552c7e2..20bbef1d5d 100644 --- a/Kernel/Devices/SelfTTYDevice.cpp +++ b/Kernel/Devices/SelfTTYDevice.cpp @@ -19,7 +19,7 @@ UNMAP_AFTER_INIT NonnullLockRefPtr SelfTTYDevice::must_create() return self_tty_device_or_error.release_value(); } -ErrorOr> SelfTTYDevice::open(int options) +ErrorOr> SelfTTYDevice::open(int options) { // Note: If for some odd reason we try to open this device (early on boot?) // while there's no current Process assigned, don't fail and return an error. diff --git a/Kernel/Devices/SelfTTYDevice.h b/Kernel/Devices/SelfTTYDevice.h index 54956aaed8..868a44973f 100644 --- a/Kernel/Devices/SelfTTYDevice.h +++ b/Kernel/Devices/SelfTTYDevice.h @@ -24,7 +24,7 @@ private: virtual bool is_openable_by_jailed_processes() const override { return true; } // ^CharacterDevice - virtual ErrorOr> open(int options) override; + virtual ErrorOr> open(int options) override; virtual ErrorOr read(OpenFileDescription&, u64, UserOrKernelBuffer&, size_t) override; virtual ErrorOr write(OpenFileDescription&, u64, UserOrKernelBuffer const&, size_t) override; virtual bool can_read(OpenFileDescription const&, u64) const override; diff --git a/Kernel/FileSystem/FIFO.cpp b/Kernel/FileSystem/FIFO.cpp index 4d8002cca5..c63ec3dac9 100644 --- a/Kernel/FileSystem/FIFO.cpp +++ b/Kernel/FileSystem/FIFO.cpp @@ -22,7 +22,7 @@ ErrorOr> FIFO::try_create(UserID uid) return adopt_nonnull_lock_ref_or_enomem(new (nothrow) FIFO(uid, move(buffer))); } -ErrorOr> FIFO::open_direction(FIFO::Direction direction) +ErrorOr> FIFO::open_direction(FIFO::Direction direction) { auto description = TRY(OpenFileDescription::try_create(*this)); attach(direction); @@ -30,7 +30,7 @@ ErrorOr> FIFO::open_direction(FIFO::Direc return description; } -ErrorOr> FIFO::open_direction_blocking(FIFO::Direction direction) +ErrorOr> FIFO::open_direction_blocking(FIFO::Direction direction) { MutexLocker locker(m_open_lock); diff --git a/Kernel/FileSystem/FIFO.h b/Kernel/FileSystem/FIFO.h index 0f01c1cf1f..d16975a625 100644 --- a/Kernel/FileSystem/FIFO.h +++ b/Kernel/FileSystem/FIFO.h @@ -29,8 +29,8 @@ public: UserID uid() const { return m_uid; } - ErrorOr> open_direction(Direction); - ErrorOr> open_direction_blocking(Direction); + ErrorOr> open_direction(Direction); + ErrorOr> open_direction_blocking(Direction); #pragma GCC diagnostic push #pragma GCC diagnostic ignored "-Woverloaded-virtual" diff --git a/Kernel/FileSystem/File.cpp b/Kernel/FileSystem/File.cpp index 25b1202577..ebc8b43c78 100644 --- a/Kernel/FileSystem/File.cpp +++ b/Kernel/FileSystem/File.cpp @@ -15,7 +15,7 @@ namespace Kernel { File::File() = default; File::~File() = default; -ErrorOr> File::open(int options) +ErrorOr> File::open(int options) { auto description = OpenFileDescription::try_create(*this); if (!description.is_error()) { diff --git a/Kernel/FileSystem/File.h b/Kernel/FileSystem/File.h index 4e1145bdae..a792ea1b58 100644 --- a/Kernel/FileSystem/File.h +++ b/Kernel/FileSystem/File.h @@ -78,7 +78,7 @@ public: virtual void will_be_destroyed() { } virtual ~File(); - virtual ErrorOr> open(int options); + virtual ErrorOr> open(int options); virtual ErrorOr close(); virtual bool can_read(OpenFileDescription const&, u64) const = 0; diff --git a/Kernel/FileSystem/FileBackedFileSystem.h b/Kernel/FileSystem/FileBackedFileSystem.h index 8bfb1a1b6f..57ae426a81 100644 --- a/Kernel/FileSystem/FileBackedFileSystem.h +++ b/Kernel/FileSystem/FileBackedFileSystem.h @@ -38,6 +38,6 @@ private: virtual bool is_file_backed() const override { return true; } IntrusiveListNode m_file_backed_file_system_node; - mutable NonnullLockRefPtr m_file_description; + NonnullRefPtr m_file_description; }; } diff --git a/Kernel/FileSystem/OpenFileDescription.cpp b/Kernel/FileSystem/OpenFileDescription.cpp index 5f0a6cf75b..4fe414ec7f 100644 --- a/Kernel/FileSystem/OpenFileDescription.cpp +++ b/Kernel/FileSystem/OpenFileDescription.cpp @@ -23,19 +23,19 @@ namespace Kernel { -ErrorOr> OpenFileDescription::try_create(Custody& custody) +ErrorOr> OpenFileDescription::try_create(Custody& custody) { auto inode_file = TRY(InodeFile::create(custody.inode())); - auto description = TRY(adopt_nonnull_lock_ref_or_enomem(new (nothrow) OpenFileDescription(move(inode_file)))); + auto description = TRY(adopt_nonnull_ref_or_enomem(new (nothrow) OpenFileDescription(move(inode_file)))); description->m_state.with([&](auto& state) { state.custody = custody; }); TRY(description->attach()); return description; } -ErrorOr> OpenFileDescription::try_create(File& file) +ErrorOr> OpenFileDescription::try_create(File& file) { - auto description = TRY(adopt_nonnull_lock_ref_or_enomem(new (nothrow) OpenFileDescription(file))); + auto description = TRY(adopt_nonnull_ref_or_enomem(new (nothrow) OpenFileDescription(file))); TRY(description->attach()); return description; } diff --git a/Kernel/FileSystem/OpenFileDescription.h b/Kernel/FileSystem/OpenFileDescription.h index c7972c1d3f..a78fb94243 100644 --- a/Kernel/FileSystem/OpenFileDescription.h +++ b/Kernel/FileSystem/OpenFileDescription.h @@ -26,8 +26,8 @@ public: class OpenFileDescription final : public AtomicRefCounted { public: - static ErrorOr> try_create(Custody&); - static ErrorOr> try_create(File&); + static ErrorOr> try_create(Custody&); + static ErrorOr> try_create(File&); ~OpenFileDescription(); Thread::FileBlocker::BlockFlags should_unblock(Thread::FileBlocker::BlockFlags) const; diff --git a/Kernel/FileSystem/ProcFS/ProcessExposed.cpp b/Kernel/FileSystem/ProcFS/ProcessExposed.cpp index 80db1e54e8..1ff4e140fe 100644 --- a/Kernel/FileSystem/ProcFS/ProcessExposed.cpp +++ b/Kernel/FileSystem/ProcFS/ProcessExposed.cpp @@ -262,7 +262,7 @@ ErrorOr Process::procfs_get_fds_stats(KBufferBuilder& builder) const return {}; } bool cloexec = file_description_metadata.flags() & FD_CLOEXEC; - LockRefPtr description = file_description_metadata.description(); + auto const* description = file_description_metadata.description(); auto description_object = TRY(array.add_object()); TRY(description_object.add("fd"sv, count)); // TODO: Better OOM handling. @@ -275,7 +275,7 @@ ErrorOr Process::procfs_get_fds_stats(KBufferBuilder& builder) const TRY(description_object.add("blocking"sv, description->is_blocking())); TRY(description_object.add("can_read"sv, description->can_read())); TRY(description_object.add("can_write"sv, description->can_write())); - Inode* inode = description->inode(); + Inode const* inode = description->inode(); if (inode != nullptr) { auto inode_object = TRY(description_object.add_object("inode"sv)); TRY(inode_object.add("fsid"sv, inode->fsid().value())); diff --git a/Kernel/FileSystem/VirtualFileSystem.cpp b/Kernel/FileSystem/VirtualFileSystem.cpp index 4ad76550d8..50860954f3 100644 --- a/Kernel/FileSystem/VirtualFileSystem.cpp +++ b/Kernel/FileSystem/VirtualFileSystem.cpp @@ -356,12 +356,12 @@ ErrorOr> VirtualFileSystem::find_already })); } -ErrorOr> VirtualFileSystem::open(Credentials const& credentials, StringView path, int options, mode_t mode, Custody& base, Optional owner) +ErrorOr> VirtualFileSystem::open(Credentials const& credentials, StringView path, int options, mode_t mode, Custody& base, Optional owner) { return open(Process::current(), credentials, path, options, mode, base, owner); } -ErrorOr> VirtualFileSystem::open(Process const& process, Credentials const& credentials, StringView path, int options, mode_t mode, Custody& base, Optional owner) +ErrorOr> VirtualFileSystem::open(Process const& process, Credentials const& credentials, StringView path, int options, mode_t mode, Custody& base, Optional owner) { if ((options & O_CREAT) && (options & O_DIRECTORY)) return EINVAL; @@ -476,12 +476,12 @@ ErrorOr VirtualFileSystem::mknod(Credentials const& credentials, StringVie return {}; } -ErrorOr> VirtualFileSystem::create(Credentials const& credentials, StringView path, int options, mode_t mode, Custody& parent_custody, Optional owner) +ErrorOr> VirtualFileSystem::create(Credentials const& credentials, StringView path, int options, mode_t mode, Custody& parent_custody, Optional owner) { return create(Process::current(), credentials, path, options, mode, parent_custody, owner); } -ErrorOr> VirtualFileSystem::create(Process const& process, Credentials const& credentials, StringView path, int options, mode_t mode, Custody& parent_custody, Optional owner) +ErrorOr> VirtualFileSystem::create(Process const& process, Credentials const& credentials, StringView path, int options, mode_t mode, Custody& parent_custody, Optional owner) { auto basename = KLexicalPath::basename(path); auto parent_path = TRY(parent_custody.try_serialize_absolute_path()); diff --git a/Kernel/FileSystem/VirtualFileSystem.h b/Kernel/FileSystem/VirtualFileSystem.h index 63d6f50c9f..cad6d0b562 100644 --- a/Kernel/FileSystem/VirtualFileSystem.h +++ b/Kernel/FileSystem/VirtualFileSystem.h @@ -59,10 +59,10 @@ public: ErrorOr remount(Custody& mount_point, int new_flags); ErrorOr unmount(Custody& mount_point); - ErrorOr> open(Credentials const&, StringView path, int options, mode_t mode, Custody& base, Optional = {}); - ErrorOr> open(Process const&, Credentials const&, StringView path, int options, mode_t mode, Custody& base, Optional = {}); - ErrorOr> create(Credentials const&, StringView path, int options, mode_t mode, Custody& parent_custody, Optional = {}); - ErrorOr> create(Process const&, Credentials const&, StringView path, int options, mode_t mode, Custody& parent_custody, Optional = {}); + ErrorOr> open(Credentials const&, StringView path, int options, mode_t mode, Custody& base, Optional = {}); + ErrorOr> open(Process const&, Credentials const&, StringView path, int options, mode_t mode, Custody& base, Optional = {}); + ErrorOr> create(Credentials const&, StringView path, int options, mode_t mode, Custody& parent_custody, Optional = {}); + ErrorOr> create(Process const&, Credentials const&, StringView path, int options, mode_t mode, Custody& parent_custody, Optional = {}); ErrorOr mkdir(Credentials const&, StringView path, mode_t mode, Custody& base); ErrorOr link(Credentials const&, StringView old_path, StringView new_path, Custody& base); ErrorOr unlink(Credentials const&, StringView path, Custody& base); diff --git a/Kernel/Net/LocalSocket.cpp b/Kernel/Net/LocalSocket.cpp index f1cbc13d57..6b88b10d35 100644 --- a/Kernel/Net/LocalSocket.cpp +++ b/Kernel/Net/LocalSocket.cpp @@ -472,8 +472,9 @@ ErrorOr LocalSocket::chown(Credentials const& credentials, OpenFileDescrip return {}; } -Vector>& LocalSocket::recvfd_queue_for(OpenFileDescription const& description) +Vector>& LocalSocket::recvfd_queue_for(OpenFileDescription const& description) { + VERIFY(mutex().is_exclusively_locked_by_current_thread()); auto role = this->role(description); if (role == Role::Connected) return m_fds_for_client; @@ -482,8 +483,9 @@ Vector>& LocalSocket::recvfd_queue_for(Op VERIFY_NOT_REACHED(); } -Vector>& LocalSocket::sendfd_queue_for(OpenFileDescription const& description) +Vector>& LocalSocket::sendfd_queue_for(OpenFileDescription const& description) { + VERIFY(mutex().is_exclusively_locked_by_current_thread()); auto role = this->role(description); if (role == Role::Connected) return m_fds_for_server; @@ -492,7 +494,7 @@ Vector>& LocalSocket::sendfd_queue_for(Op VERIFY_NOT_REACHED(); } -ErrorOr LocalSocket::sendfd(OpenFileDescription const& socket_description, NonnullLockRefPtr passing_description) +ErrorOr LocalSocket::sendfd(OpenFileDescription const& socket_description, NonnullRefPtr passing_description) { MutexLocker locker(mutex()); auto role = this->role(socket_description); @@ -506,7 +508,7 @@ ErrorOr LocalSocket::sendfd(OpenFileDescription const& socket_description, return {}; } -ErrorOr> LocalSocket::recvfd(OpenFileDescription const& socket_description) +ErrorOr> LocalSocket::recvfd(OpenFileDescription const& socket_description) { MutexLocker locker(mutex()); auto role = this->role(socket_description); @@ -520,10 +522,10 @@ ErrorOr> LocalSocket::recvfd(OpenFileDesc return queue.take_first(); } -ErrorOr>> LocalSocket::recvfds(OpenFileDescription const& socket_description, int n) +ErrorOr>> LocalSocket::recvfds(OpenFileDescription const& socket_description, int n) { MutexLocker locker(mutex()); - Vector> fds; + Vector> fds; auto role = this->role(socket_description); if (role != Role::Connected && role != Role::Accepted) diff --git a/Kernel/Net/LocalSocket.h b/Kernel/Net/LocalSocket.h index 5bdfa512e9..7b7a34e528 100644 --- a/Kernel/Net/LocalSocket.h +++ b/Kernel/Net/LocalSocket.h @@ -15,8 +15,8 @@ namespace Kernel { class OpenFileDescription; struct SocketPair { - NonnullLockRefPtr description0; - NonnullLockRefPtr description1; + NonnullRefPtr description0; + NonnullRefPtr description1; }; class LocalSocket final : public Socket { @@ -26,9 +26,9 @@ public: static ErrorOr try_create_connected_pair(int type); virtual ~LocalSocket() override; - ErrorOr sendfd(OpenFileDescription const& socket_description, NonnullLockRefPtr passing_description); - ErrorOr> recvfd(OpenFileDescription const& socket_description); - ErrorOr>> recvfds(OpenFileDescription const& socket_description, int n); + ErrorOr sendfd(OpenFileDescription const& socket_description, NonnullRefPtr passing_description); + ErrorOr> recvfd(OpenFileDescription const& socket_description); + ErrorOr>> recvfds(OpenFileDescription const& socket_description, int n); static void for_each(Function); static ErrorOr try_for_each(Function(LocalSocket const&)>); @@ -60,8 +60,8 @@ private: bool has_attached_peer(OpenFileDescription const&) const; DoubleBuffer* receive_buffer_for(OpenFileDescription&); DoubleBuffer* send_buffer_for(OpenFileDescription&); - Vector>& sendfd_queue_for(OpenFileDescription const&); - Vector>& recvfd_queue_for(OpenFileDescription const&); + Vector>& sendfd_queue_for(OpenFileDescription const&); + Vector>& recvfd_queue_for(OpenFileDescription const&); void set_connect_side_role(Role connect_side_role, bool force_evaluate_block_conditions = false) { @@ -101,8 +101,8 @@ private: NonnullOwnPtr m_for_client; NonnullOwnPtr m_for_server; - Vector> m_fds_for_client; - Vector> m_fds_for_server; + Vector> m_fds_for_client; + Vector> m_fds_for_server; IntrusiveListNode m_list_node; diff --git a/Kernel/Process.cpp b/Kernel/Process.cpp index 70b3366efb..504484976f 100644 --- a/Kernel/Process.cpp +++ b/Kernel/Process.cpp @@ -570,13 +570,13 @@ Process::OpenFileDescriptionAndFlags& Process::OpenFileDescriptions::at(size_t i return m_fds_metadatas[i]; } -ErrorOr> Process::OpenFileDescriptions::open_file_description(int fd) const +ErrorOr> Process::OpenFileDescriptions::open_file_description(int fd) const { if (fd < 0) return EBADF; if (static_cast(fd) >= m_fds_metadatas.size()) return EBADF; - LockRefPtr description = m_fds_metadatas[fd].description(); + RefPtr description = m_fds_metadatas[fd].description(); if (!description) return EBADF; return description.release_nonnull(); @@ -706,7 +706,7 @@ ErrorOr Process::dump_perfcore() return KString::formatted("{}_{}", process_name->view(), pid().value()); })); auto perfcore_filename = TRY(KString::formatted("{}.profile", base_filename)); - LockRefPtr description; + RefPtr description; auto credentials = this->credentials(); for (size_t attempt = 1; attempt <= 10; ++attempt) { auto description_or_error = VirtualFileSystem::the().open(*this, credentials, perfcore_filename->view(), O_CREAT | O_EXCL, 0400, current_directory(), UidAndGid { 0, 0 }); @@ -945,7 +945,7 @@ void Process::OpenFileDescriptionAndFlags::clear() m_flags = 0; } -void Process::OpenFileDescriptionAndFlags::set(NonnullLockRefPtr&& description, u32 flags) +void Process::OpenFileDescriptionAndFlags::set(NonnullRefPtr description, u32 flags) { m_description = move(description); m_flags = flags; diff --git a/Kernel/Process.h b/Kernel/Process.h index 1588940a36..075775ca4d 100644 --- a/Kernel/Process.h +++ b/Kernel/Process.h @@ -475,7 +475,7 @@ public: ErrorOr exec(NonnullOwnPtr path, Vector> arguments, Vector> environment, Thread*& new_main_thread, InterruptsState& previous_interrupts_state, int recursion_depth = 0); - ErrorOr load(NonnullLockRefPtr main_program_description, LockRefPtr interpreter_description, const ElfW(Ehdr) & main_program_header); + ErrorOr load(NonnullRefPtr main_program_description, RefPtr interpreter_description, const ElfW(Ehdr) & main_program_header); void terminate_due_to_signal(u8 signal); ErrorOr send_signal(u8 signal, Process* sender); @@ -605,12 +605,12 @@ private: bool create_perf_events_buffer_if_needed(); void delete_perf_events_buffer(); - ErrorOr do_exec(NonnullLockRefPtr main_program_description, Vector> arguments, Vector> environment, LockRefPtr interpreter_description, Thread*& new_main_thread, InterruptsState& previous_interrupts_state, const ElfW(Ehdr) & main_program_header); + ErrorOr do_exec(NonnullRefPtr main_program_description, Vector> arguments, Vector> environment, RefPtr interpreter_description, Thread*& new_main_thread, InterruptsState& previous_interrupts_state, const ElfW(Ehdr) & main_program_header); ErrorOr do_write(OpenFileDescription&, UserOrKernelBuffer const&, size_t, Optional = {}); ErrorOr do_statvfs(FileSystem const& path, Custody const*, statvfs* buf); - ErrorOr> find_elf_interpreter_for_executable(StringView path, ElfW(Ehdr) const& main_executable_header, size_t main_executable_header_size, size_t file_size); + ErrorOr> find_elf_interpreter_for_executable(StringView path, ElfW(Ehdr) const& main_executable_header, size_t main_executable_header_size, size_t file_size); ErrorOr do_kill(Process&, int signal); ErrorOr do_killpg(ProcessGroupID pgrp, int signal); @@ -704,10 +704,10 @@ public: void set_flags(u32 flags) { m_flags = flags; } void clear(); - void set(NonnullLockRefPtr&&, u32 flags = 0); + void set(NonnullRefPtr, u32 flags = 0); private: - LockRefPtr m_description; + RefPtr m_description; bool m_is_allocated { false }; u32 m_flags { 0 }; }; @@ -758,7 +758,7 @@ public: m_fds_metadatas.clear(); } - ErrorOr> open_file_description(int fd) const; + ErrorOr> open_file_description(int fd) const; private: static constexpr size_t s_max_open_file_descriptors { FD_SETSIZE }; @@ -808,12 +808,12 @@ public: MutexProtected& fds() { return m_fds; } MutexProtected const& fds() const { return m_fds; } - ErrorOr> open_file_description(int fd) + ErrorOr> open_file_description(int fd) { return m_fds.with_shared([fd](auto& fds) { return fds.open_file_description(fd); }); } - ErrorOr> open_file_description(int fd) const + ErrorOr> open_file_description(int fd) const { return m_fds.with_shared([fd](auto& fds) { return fds.open_file_description(fd); }); } diff --git a/Kernel/Syscalls/anon_create.cpp b/Kernel/Syscalls/anon_create.cpp index c87196b8b5..c7645ce2e1 100644 --- a/Kernel/Syscalls/anon_create.cpp +++ b/Kernel/Syscalls/anon_create.cpp @@ -38,7 +38,7 @@ ErrorOr Process::sys$anon_create(size_t size, int options) return m_fds.with_exclusive([&](auto& fds) -> ErrorOr { auto new_fd = TRY(fds.allocate()); - fds[new_fd.fd].set(move(description), fd_flags); + fds[new_fd.fd].set(description, fd_flags); return new_fd.fd; }); } diff --git a/Kernel/Syscalls/execve.cpp b/Kernel/Syscalls/execve.cpp index 1cb21d7e7c..0f68783717 100644 --- a/Kernel/Syscalls/execve.cpp +++ b/Kernel/Syscalls/execve.cpp @@ -423,8 +423,8 @@ static ErrorOr load_elf_object(NonnullOwnPtr n } ErrorOr -Process::load(NonnullLockRefPtr main_program_description, - LockRefPtr interpreter_description, const ElfW(Ehdr) & main_program_header) +Process::load(NonnullRefPtr main_program_description, + RefPtr interpreter_description, const ElfW(Ehdr) & main_program_header) { auto new_space = TRY(Memory::AddressSpace::try_create(nullptr)); @@ -471,8 +471,8 @@ void Process::clear_signal_handlers_for_exec() } } -ErrorOr Process::do_exec(NonnullLockRefPtr main_program_description, Vector> arguments, Vector> environment, - LockRefPtr interpreter_description, Thread*& new_main_thread, InterruptsState& previous_interrupts_state, const ElfW(Ehdr) & main_program_header) +ErrorOr Process::do_exec(NonnullRefPtr main_program_description, Vector> arguments, Vector> environment, + RefPtr interpreter_description, Thread*& new_main_thread, InterruptsState& previous_interrupts_state, const ElfW(Ehdr) & main_program_header) { VERIFY(is_user_process()); VERIFY(!Processor::in_critical()); @@ -784,7 +784,7 @@ static ErrorOr>> find_shebang_interpreter_for_exec return ENOEXEC; } -ErrorOr> Process::find_elf_interpreter_for_executable(StringView path, ElfW(Ehdr) const& main_executable_header, size_t main_executable_header_size, size_t file_size) +ErrorOr> Process::find_elf_interpreter_for_executable(StringView path, ElfW(Ehdr) const& main_executable_header, size_t main_executable_header_size, size_t file_size) { // Not using ErrorOr here because we'll want to do the same thing in userspace in the RTLD StringBuilder interpreter_path_builder; diff --git a/Kernel/Syscalls/mmap.cpp b/Kernel/Syscalls/mmap.cpp index 787b056566..577545aa73 100644 --- a/Kernel/Syscalls/mmap.cpp +++ b/Kernel/Syscalls/mmap.cpp @@ -196,7 +196,7 @@ ErrorOr Process::sys$mmap(Userspace use Memory::Region* region = nullptr; - LockRefPtr description; + RefPtr description; LockRefPtr vmobject; u64 used_offset = 0; diff --git a/Kernel/Syscalls/poll.cpp b/Kernel/Syscalls/poll.cpp index 7302fa8566..3deec7e1ec 100644 --- a/Kernel/Syscalls/poll.cpp +++ b/Kernel/Syscalls/poll.cpp @@ -51,7 +51,7 @@ ErrorOr Process::sys$poll(Userspace use TRY(m_fds.with_shared([&](auto& fds) -> ErrorOr { for (size_t i = 0; i < params.nfds; i++) { auto& pfd = fds_copy[i]; - LockRefPtr description; + RefPtr description; auto description_or_error = fds.open_file_description(pfd.fd); if (!description_or_error.is_error()) description = description_or_error.release_value(); diff --git a/Kernel/Syscalls/read.cpp b/Kernel/Syscalls/read.cpp index 3314b2bf37..c7eb069961 100644 --- a/Kernel/Syscalls/read.cpp +++ b/Kernel/Syscalls/read.cpp @@ -13,7 +13,7 @@ namespace Kernel { using BlockFlags = Thread::FileBlocker::BlockFlags; -static ErrorOr> open_readable_file_description(auto& fds, int fd) +static ErrorOr> open_readable_file_description(auto& fds, int fd) { auto description = TRY(fds.with_shared([&](auto& fds) { return fds.open_file_description(fd); })); if (!description->is_readable()) diff --git a/Kernel/Syscalls/socket.cpp b/Kernel/Syscalls/socket.cpp index 59d8885d27..95f97ed99b 100644 --- a/Kernel/Syscalls/socket.cpp +++ b/Kernel/Syscalls/socket.cpp @@ -20,7 +20,7 @@ namespace Kernel { TRY(require_promise(Pledge::unix)); \ } while (0) -static void setup_socket_fd(Process::OpenFileDescriptions& fds, int fd, NonnullLockRefPtr description, int type) +static void setup_socket_fd(Process::OpenFileDescriptions& fds, int fd, NonnullRefPtr description, int type) { description->set_readable(true); description->set_writable(true); @@ -94,7 +94,7 @@ ErrorOr Process::sys$accept4(Userspace(user_address_size))); ScopedDescriptionAllocation fd_allocation; - LockRefPtr accepting_socket_description; + RefPtr accepting_socket_description; TRY(m_fds.with_exclusive([&](auto& fds) -> ErrorOr { fd_allocation = TRY(fds.allocate()); diff --git a/Kernel/Syscalls/utimensat.cpp b/Kernel/Syscalls/utimensat.cpp index 23e6493412..4ab0bb600a 100644 --- a/Kernel/Syscalls/utimensat.cpp +++ b/Kernel/Syscalls/utimensat.cpp @@ -38,7 +38,7 @@ ErrorOr Process::sys$utimensat(Userspace path; - LockRefPtr description; + RefPtr description; RefPtr base; auto path_or_error = get_syscall_path_argument(params.path); diff --git a/Kernel/TTY/PTYMultiplexer.cpp b/Kernel/TTY/PTYMultiplexer.cpp index 118775858f..541e5e9a8e 100644 --- a/Kernel/TTY/PTYMultiplexer.cpp +++ b/Kernel/TTY/PTYMultiplexer.cpp @@ -38,9 +38,9 @@ UNMAP_AFTER_INIT void PTYMultiplexer::initialize() MUST(the().after_inserting()); } -ErrorOr> PTYMultiplexer::open(int options) +ErrorOr> PTYMultiplexer::open(int options) { - return m_freelist.with([&](auto& freelist) -> ErrorOr> { + return m_freelist.with([&](auto& freelist) -> ErrorOr> { if (freelist.is_empty()) return EBUSY; diff --git a/Kernel/TTY/PTYMultiplexer.h b/Kernel/TTY/PTYMultiplexer.h index c9da6ddbe0..441a7169df 100644 --- a/Kernel/TTY/PTYMultiplexer.h +++ b/Kernel/TTY/PTYMultiplexer.h @@ -22,7 +22,7 @@ public: static PTYMultiplexer& the(); // ^CharacterDevice - virtual ErrorOr> open(int options) override; + virtual ErrorOr> open(int options) override; virtual ErrorOr read(OpenFileDescription&, u64, UserOrKernelBuffer&, size_t) override { return 0; } virtual ErrorOr write(OpenFileDescription&, u64, UserOrKernelBuffer const&, size_t) override { return 0; } virtual bool can_read(OpenFileDescription const&, u64) const override { return true; } diff --git a/Kernel/Thread.h b/Kernel/Thread.h index a858664c6c..d6939d6a95 100644 --- a/Kernel/Thread.h +++ b/Kernel/Thread.h @@ -519,7 +519,7 @@ public: explicit OpenFileDescriptionBlocker(OpenFileDescription&, BlockFlags, BlockFlags&); private: - NonnullLockRefPtr m_blocked_description; + NonnullRefPtr m_blocked_description; const BlockFlags m_flags; BlockFlags& m_unblocked_flags; bool m_did_unblock { false }; @@ -577,7 +577,7 @@ public: class SelectBlocker final : public FileBlocker { public: struct FDInfo { - LockRefPtr description; + RefPtr description; BlockFlags block_flags { BlockFlags::None }; BlockFlags unblocked_flags { BlockFlags::None }; };