[libc-commits] [PATCH] D150118: [libc] Prevent changing ownership of the port once opened

Joseph Huber via Phabricator via libc-commits libc-commits at lists.llvm.org
Mon May 8 07:07:14 PDT 2023


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

The Port type has stipuations that the same exact mask used to open it
needs to close it. This can currently be violated by calling its move
constructor to put it somewhere else. We still need the move constructor
to handle the open and closing functions. So, we simply make these
constructors private and only allow a few classes to have move
priviledges on it.


Repository:
  rG LLVM Github Monorepo

https://reviews.llvm.org/D150118

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
@@ -234,16 +234,22 @@
 /// processes. A port is conceptually an index into the memory provided by the
 /// underlying process that is guarded by a lock bit.
 template <bool T> struct Port {
-  // TODO: This should be move-only.
   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() = default;
+
+private:
   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;
 
+  friend struct Client;
+  friend struct Server;
+  friend class cpp::optional<Port<T>>;
+
+public:
   template <typename U> LIBC_INLINE void recv(U use);
   template <typename F> LIBC_INLINE void send(F fill);
   template <typename F, typename U>


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D150118.520364.patch
Type: text/x-patch
Size: 1105 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/libc-commits/attachments/20230508/f3d6ec48/attachment.bin>


More information about the libc-commits mailing list