llnl / llnl/conduit

Make `Request` non-copyable

Open
#1,633 2 comments 0 reactions 1 assignee View on GitHub

@mohityadav8 is already working on this.

Since Jul 28, 2026.

bug
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

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.