1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-07-24 15:37:43 +00:00

Kernel: Use move semantics in sys$sendfd()

Avoid an unnecessary NonnullRefPtr<OpenFileDescription> copy.
This commit is contained in:
Andreas Kling 2021-09-15 21:09:47 +02:00
parent 422d725c79
commit b6efd66d56
3 changed files with 4 additions and 4 deletions

View file

@ -466,7 +466,7 @@ NonnullRefPtrVector<OpenFileDescription>& LocalSocket::sendfd_queue_for(const Op
VERIFY_NOT_REACHED(); VERIFY_NOT_REACHED();
} }
KResult LocalSocket::sendfd(const OpenFileDescription& socket_description, OpenFileDescription& passing_description) KResult LocalSocket::sendfd(OpenFileDescription const& socket_description, NonnullRefPtr<OpenFileDescription> passing_description)
{ {
MutexLocker locker(mutex()); MutexLocker locker(mutex());
auto role = this->role(socket_description); auto role = this->role(socket_description);

View file

@ -26,7 +26,7 @@ public:
static KResultOr<SocketPair> try_create_connected_pair(int type); static KResultOr<SocketPair> try_create_connected_pair(int type);
virtual ~LocalSocket() override; virtual ~LocalSocket() override;
KResult sendfd(const OpenFileDescription& socket_description, OpenFileDescription& passing_description); KResult sendfd(OpenFileDescription const& socket_description, NonnullRefPtr<OpenFileDescription> passing_description);
KResultOr<NonnullRefPtr<OpenFileDescription>> recvfd(const OpenFileDescription& socket_description); KResultOr<NonnullRefPtr<OpenFileDescription>> recvfd(const OpenFileDescription& socket_description);
static void for_each(Function<void(const LocalSocket&)>); static void for_each(Function<void(const LocalSocket&)>);

View file

@ -23,9 +23,9 @@ KResultOr<FlatPtr> Process::sys$sendfd(int sockfd, int fd)
if (!socket.is_connected()) if (!socket.is_connected())
return ENOTCONN; return ENOTCONN;
auto passing_descriptor = TRY(fds().open_file_description(fd)); auto passing_description = TRY(fds().open_file_description(fd));
auto& local_socket = static_cast<LocalSocket&>(socket); auto& local_socket = static_cast<LocalSocket&>(socket);
return local_socket.sendfd(*socket_description, *passing_descriptor); return local_socket.sendfd(*socket_description, move(passing_description));
} }
KResultOr<FlatPtr> Process::sys$recvfd(int sockfd, int options) KResultOr<FlatPtr> Process::sys$recvfd(int sockfd, int options)