You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
v5.0.x has fallen well behind main (and v6.0.x) on partitioned communication. Its most recent functional partitioned fix is from February 2022; everything landed since has gone to main and, mostly, to v6.0.x, but not to v5.0.x.
This issue enumerates the gap. Below, "on v6.0.x" means the commit (or an equivalent) is already on the v6.0.x branch.
Correctness / conformance fixes (the ones that actually matter to users)
Plus the three fixes in flight for main in #14155, which are not yet merged:
part/persist: cancel the setup handshake when freeing a request — a deadlock and use-after-free. Freeing a partitioned request that was never started leaves its lazy-setup receive posted on the user's communicator/peer/tag, against recycled memory; it then consumes the setup message of the next partitioned operation on that same communicator/peer/tag, which never initializes and hangs in MPI_Wait.
Support MPI_PROC_NULL in partitioned communication — MPI_Psend_init/MPI_Precv_init pass MPI_PROC_NULL to the PML as if it were a real peer rank, which reads outside the communicator's process array (undefined behavior; crashes depending on what sits before the array). MPI-5.0 §3.10.
86be709c68 in particular is the C binding generator work — v5.0.x predates it and still has hand-written ompi/mpi/c/parrived.c rather than parrived.c.in, so this one is structural, not a candidate.
Partly. I trialled the picks against v5.0.x in a scratch worktree:
The C code ports better than expected. Even though v5.0.x predates the binding generator (parrived.c, not parrived.c.in), git's rename detection bridges the split during the 3-way merge, so the binding changes land on the right pre-6.0 files. v5.0.x also already has ompi_request_persistent_noop_create() and already uses it in recv_init.c, so the MPI_PROC_NULL fix's convention is available there.
v5.0.xhas fallen well behindmain(andv6.0.x) on partitioned communication. Its most recent functional partitioned fix is from February 2022; everything landed since has gone tomainand, mostly, tov6.0.x, but not tov5.0.x.This issue enumerates the gap. Below, "on v6.0.x" means the commit (or an equivalent) is already on the
v6.0.xbranch.Correctness / conformance fixes (the ones that actually matter to users)
MPI_Parrivedwith null or inactive requestsreq_completebeing a boolPlus the three fixes in flight for
mainin #14155, which are not yet merged:part/persist: cancel the setup handshake when freeing a request — a deadlock and use-after-free. Freeing a partitioned request that was never started leaves its lazy-setup receive posted on the user's communicator/peer/tag, against recycled memory; it then consumes the setup message of the next partitioned operation on that same communicator/peer/tag, which never initializes and hangs inMPI_Wait.MPI_Parrivedfor null and inactive requests (supersedes / builds on Fix issue #14003: MPI_Parrived with null or inactive requests #14103; MPI-5.0 §4.2.2).MPI_PROC_NULLin partitioned communication —MPI_Psend_init/MPI_Precv_initpassMPI_PROC_NULLto the PML as if it were a real peer rank, which reads outside the communicator's process array (undefined behavior; crashes depending on what sits before the array). MPI-5.0 §3.10.Instrumentation
Build / infrastructure (likely v6-era, probably not wanted on v5.0.x)
86be709c68in particular is the C binding generator work —v5.0.xpredates it and still has hand-writtenompi/mpi/c/parrived.crather thanparrived.c.in, so this one is structural, not a candidate.Cosmetic
Can these just be cherry-picked?
Partly. I trialled the picks against
v5.0.xin a scratch worktree:v5.0.xpredates the binding generator (parrived.c, notparrived.c.in), git's rename detection bridges the split during the 3-way merge, so the binding changes land on the right pre-6.0 files.v5.0.xalso already hasompi_request_persistent_noop_create()and already uses it inrecv_init.c, so theMPI_PROC_NULLfix's convention is available there.MPI_Parrivedfix from Fix MPI_Parrived for null/inactive requests, and partitioned communication with MPI_PROC_NULL #14155, since the latter modifies the code the former adds. (Or the two can be squashed forv5.0.x.)docs/release-notes/changelog/v6.1.x.rst, which does not exist onv5.0.x— they must be retargeted tov5.0.x.rst;make checktest wiring (configure.ac,test/mpi/Makefile.am,.gitignore) conflicts, becausev5.0.x'stest/mpihas not/orfile/subdirectories;test/mpi/part/Makefile.ammust drop itsinclude $(top_srcdir)/test/Makefile.mca-dso-check, since that fix is specific tomain/v6.0.x.So a
v5.0.xback-port is a hand-adapted PR, not a plain cherry-pick — but the code itself is not the hard part.