[libc-commits] [PATCH] D149974: [libc] Make the RPC interfaces move only

Joseph Huber via Phabricator via libc-commits libc-commits at lists.llvm.org
Fri May 5 09:59:40 PDT 2023


jhuber6 created this revision.
jhuber6 added reviewers: sivachandra, lntue, gchatelet, JonChesterfield, jdoerfert, michaelrj.
Herald added subscribers: libc-commits, ecnelises, tschuett.
Herald added projects: libc-project, All.
jhuber6 requested review of this revision.

This patch uses the changed interface in D149972 <https://reviews.llvm.org/D149972> to make these classes
move-only. The `Port` class could be further refined to be
construct-only in a future patch, but for now this makes it more
difficult to misuse the interface.

Depends on D149972 <https://reviews.llvm.org/D149972>


Repository:
  rG LLVM Github Monorepo

https://reviews.llvm.org/D149974

Files:
  libc/src/__support/RPC/rpc.h


Index: libc/src/__support/RPC/rpc.h
===================================================================
--- libc/src/__support/RPC/rpc.h
+++ libc/src/__support/RPC/rpc.h
@@ -98,8 +98,10 @@
 ///
 template <bool InvertInbox> struct Process {
   LIBC_INLINE Process() = default;
-  LIBC_INLINE Process(const Process &) = default;
-  LIBC_INLINE Process &operator=(const Process &) = default;
+  LIBC_INLINE Process(const Process &) = delete;
+  LIBC_INLINE Process &operator=(const Process &) = delete;
+  LIBC_INLINE Process(Process &&) = default;
+  LIBC_INLINE Process &operator=(Process &&) = default;
   LIBC_INLINE ~Process() = default;
 
   uint64_t port_count;
@@ -236,8 +238,10 @@
   LIBC_INLINE Port(Process<T> &process, uint64_t lane_mask, uint64_t index,
                    uint32_t out)
       : process(process), lane_mask(lane_mask), index(index), out(out) {}
-  LIBC_INLINE Port(const Port &) = default;
+  LIBC_INLINE Port(const Port &) = delete;
   LIBC_INLINE Port &operator=(const Port &) = delete;
+  LIBC_INLINE Port(Port &&) = default;
+  LIBC_INLINE Port &operator=(Port &&) = default;
   LIBC_INLINE ~Port() = default;
 
   template <typename U> LIBC_INLINE void recv(U use);
@@ -264,8 +268,8 @@
 /// The RPC client used to make requests to the server.
 struct Client : public Process<false> {
   LIBC_INLINE Client() = default;
-  LIBC_INLINE Client(const Client &) = default;
-  LIBC_INLINE Client &operator=(const Client &) = default;
+  LIBC_INLINE Client(const Client &) = delete;
+  LIBC_INLINE Client &operator=(const Client &) = delete;
   LIBC_INLINE ~Client() = default;
 
   using Port = rpc::Port<false>;
@@ -276,8 +280,8 @@
 /// The RPC server used to respond to the client.
 struct Server : public Process<true> {
   LIBC_INLINE Server() = default;
-  LIBC_INLINE Server(const Server &) = default;
-  LIBC_INLINE Server &operator=(const Server &) = default;
+  LIBC_INLINE Server(const Server &) = delete;
+  LIBC_INLINE Server &operator=(const Server &) = delete;
   LIBC_INLINE ~Server() = default;
 
   using Port = rpc::Port<true>;
@@ -444,7 +448,7 @@
 LIBC_INLINE Client::Port Client::open(uint16_t opcode) {
   for (;;) {
     if (cpp::optional<Client::Port> p = try_open(opcode))
-      return p.value();
+      return cpp::move(p.value());
     sleep_briefly();
   }
 }
@@ -488,7 +492,7 @@
 LIBC_INLINE Server::Port Server::open() {
   for (;;) {
     if (cpp::optional<Server::Port> p = try_open())
-      return p.value();
+      return cpp::move(p.value());
     sleep_briefly();
   }
 }


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D149974.519909.patch
Type: text/x-patch
Size: 2536 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/libc-commits/attachments/20230505/aa81de40/attachment-0001.bin>


More information about the libc-commits mailing list