<div>Hi list,</div><div><br></div><div>with the help of others, here is an adaptation of the "counter-example" based on p2p communications only.</div><div><br></div><div>MPI_COMM_WORLD is the communicator used in library A</div>
<div>MPI_COMM_2 is the communicator used in library B</div><div><br></div><div>rank 0: belongs to MPI_COMM_WORLD only</div><div>  -> in library A: MPI_Send(MPI_COMM_WORLD, dst=1);</div><div>   -> crashes </div><div>
<br></div><div>rank 1: belongs to MPI_COMM_WORLD and MPI_COMM_2</div><div>  -> in library A: MPI_Recv(MPI_COMM_WORLD, src=0)</div><div>   -> detects the failure</div><div>   -> calls the error manager: collective repair</div>
<div>  -> would have entere library B and called: MPI_Send(MPI_COMM_2, dst=2);</div><div><br></div><div>rank 2: belongs to MPI_COMM_WORLD and MPI_COMM_2</div><div>  -> does nothing in library A except entering library B.</div>
<div>  -> in library B: MPI_Recv(MPI_COMM_2, src=1);</div><div>    -> will never succeed</div><div><br></div><div>I understand from the discussion we had that a solution would be to validate COMM_WORLD for process 2 before entering library 2. I agree with that, but would like you to consider that it virtually means that we ask users to call a $n^2$ communications operation before any call of any function of any library (and possibly at the return of calls) if they want to use collective repairs. I would advocate studying a less performance-killer approach, where errors of any communicator would be notified in any MPI call.</div>
<div><br></div><div>Bests,</div><div>Thomas</div>