Make `Request` non-copyable
@mohityadav8 is already working on this.
Since Jul 28, 2026.
- Dominant language
- C++
- Stars
- 248
- Forks
- 72
- Avg merge
- 1d 16h
- Merged PRs (30d)
- 15
Description
from Jason Burmark:
Codex pointed out something about the conduit::Request object that should probably be addressed.
Request is more delicate. It is a plain struct with no custom copy/move control; see conduit/src/libs/
relay/conduit_relay_mpi.hpp:44. That means:
- Copying a Request will copy the MPI_Request handle by value.
- It will also deep-copy m_buffer because Node is copyable.
- It will shallow-copy m_rcv_ptr.
That is mechanically destructible, but semantically dangerous. Two Request objects can then appear to
represent the same live MPI operation while owning different buffers and sharing the same raw receive
pointer. That is the sort of thing that can cause subtle bugs, even if it doesn’t directly leak.
Codex told me:
- Request should be non-copyable
- if move support is wanted, it should be explicit and carefully implemented
- callers should treat Request as a unique handle with stable identity until wait/wait_all
One extra detail worth noting for the ticket: wait_all explicitly copies only the raw MPI_Request handles into a temporary array at src/libs/relay/conduit_relay_mpi.cpp:1299. That is a local
implementation detail and not the same thing as copying the full Request wrapper.
Contributor guide
No contributing guide indexed for this repository
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Assessment
This issue has not been assessed yet.