Forráskód Böngészése

Kernel: Use move semantics in sys$sendfd()

Avoid an unnecessary NonnullRefPtr<OpenFileDescription> copy.
Andreas Kling 3 éve
szülő
commit
b6efd66d56
3 módosított fájl, 4 hozzáadás és 4 törlés
  1. 1 1
      Kernel/Net/LocalSocket.cpp
  2. 1 1
      Kernel/Net/LocalSocket.h
  3. 2 2
      Kernel/Syscalls/sendfd.cpp

+ 1 - 1
Kernel/Net/LocalSocket.cpp

@@ -466,7 +466,7 @@ NonnullRefPtrVector<OpenFileDescription>& LocalSocket::sendfd_queue_for(const Op
     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());
     auto role = this->role(socket_description);

+ 1 - 1
Kernel/Net/LocalSocket.h

@@ -26,7 +26,7 @@ public:
     static KResultOr<SocketPair> try_create_connected_pair(int type);
     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);
 
     static void for_each(Function<void(const LocalSocket&)>);

+ 2 - 2
Kernel/Syscalls/sendfd.cpp

@@ -23,9 +23,9 @@ KResultOr<FlatPtr> Process::sys$sendfd(int sockfd, int fd)
     if (!socket.is_connected())
         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);
-    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)