diff options
author | Andreas Kling <kling@serenityos.org> | 2022-01-29 01:22:28 +0100 |
---|---|---|
committer | Andreas Kling <kling@serenityos.org> | 2022-01-29 02:17:06 +0100 |
commit | 8ebec2938cd43d16655404ba86b20c73bfb724a7 (patch) | |
tree | 66af99284c69870ffc150c4137dedf8811147f3a /Kernel/Syscalls/sendfd.cpp | |
parent | 93e90e16c3857badd86991b8dcca4c5ebc3ed5a7 (diff) | |
download | serenity-8ebec2938cd43d16655404ba86b20c73bfb724a7.zip |
Kernel: Convert process file descriptor table to a SpinlockProtected
Instead of manually locking in the various member functions of
Process::OpenFileDescriptions, simply wrap it in a SpinlockProtected.
Diffstat (limited to 'Kernel/Syscalls/sendfd.cpp')
-rw-r--r-- | Kernel/Syscalls/sendfd.cpp | 10 |
1 files changed, 5 insertions, 5 deletions
diff --git a/Kernel/Syscalls/sendfd.cpp b/Kernel/Syscalls/sendfd.cpp index 4c1dd274ee..f0ac59ea6b 100644 --- a/Kernel/Syscalls/sendfd.cpp +++ b/Kernel/Syscalls/sendfd.cpp @@ -14,7 +14,7 @@ ErrorOr<FlatPtr> Process::sys$sendfd(int sockfd, int fd) { VERIFY_PROCESS_BIG_LOCK_ACQUIRED(this) TRY(require_promise(Pledge::sendfd)); - auto socket_description = TRY(fds().open_file_description(sockfd)); + auto socket_description = TRY(open_file_description(sockfd)); if (!socket_description->is_socket()) return ENOTSOCK; auto& socket = *socket_description->socket(); @@ -23,7 +23,7 @@ ErrorOr<FlatPtr> Process::sys$sendfd(int sockfd, int fd) if (!socket.is_connected()) return ENOTCONN; - auto passing_description = TRY(fds().open_file_description(fd)); + auto passing_description = TRY(open_file_description(fd)); auto& local_socket = static_cast<LocalSocket&>(socket); TRY(local_socket.sendfd(*socket_description, move(passing_description))); return 0; @@ -33,14 +33,14 @@ ErrorOr<FlatPtr> Process::sys$recvfd(int sockfd, int options) { VERIFY_PROCESS_BIG_LOCK_ACQUIRED(this) TRY(require_promise(Pledge::recvfd)); - auto socket_description = TRY(fds().open_file_description(sockfd)); + auto socket_description = TRY(open_file_description(sockfd)); if (!socket_description->is_socket()) return ENOTSOCK; auto& socket = *socket_description->socket(); if (!socket.is_local()) return EAFNOSUPPORT; - auto fd_allocation = TRY(m_fds.allocate()); + auto fd_allocation = TRY(m_fds.with([](auto& fds) { return fds.allocate(); })); auto& local_socket = static_cast<LocalSocket&>(socket); auto received_description = TRY(local_socket.recvfd(*socket_description)); @@ -49,7 +49,7 @@ ErrorOr<FlatPtr> Process::sys$recvfd(int sockfd, int options) if (options & O_CLOEXEC) fd_flags |= FD_CLOEXEC; - m_fds[fd_allocation.fd].set(move(received_description), fd_flags); + m_fds.with([&](auto& fds) { fds[fd_allocation.fd].set(move(received_description), fd_flags); }); return fd_allocation.fd; } |