helper: Do not always duplicate MPI_Comm on Comm construction
Created by: bradking
Through a series of commits:
-
f7fec28f (core: Refactor ADIOS factory to use Comm encapsulation, 2019-06-21,
v2.5.0~66^2~35) -
29177b01 (engine: Construct with Comm encapsulation, 2019-06-18,
v2.5.0~66^2~31) - 33715618 (helper: Factor out MPI-specific Comm interfaces, 2019-09-12)
- 89891238 (core: Replace MPI with Comm in ADIOS, IO, and Stream interfaces, 2019-10-07)
we converted the core::ADIOS constructor from taking a MPI_Comm and calling MPI_Comm_dup internally to taking an instance of helper::Comm by value, typically moved from an instance created by helper::CommFromMPI. Therefore helper::CommFromMPI calls MPI_Comm_dup to preserve the existing semantics.
However, two commits introduced uses of helper::CommFromMPI in places that did not previously use MPI_Comm_dup:
- 554a756f (utils: Port adios_reorganize to Comm encapsulation, 2019-09-19)
- 1ec1ec43 (sst: Re-implement SMPI_ interfaces as C wrappers of Comm encapsulation, 2020-02-11)
The calls updated by those commits are intend to create a helper::Comm that uses MPI_COMM_WORLD without duplicating it.
In order to distinguish the cases that duplicate from those that do not, replace helper::CommFromMPI with two variants:
-
helper::CommDupMPIto duplicate the givenMPI_Comm -
helper::CommWithMPIto take ownership of the givenMPI_Comm
Update all the call sites to use the variant with appropriate semantics.
Fixes: #2008 (closed)