1
1

Fix for bug Josh found -- if we kill as a result of the

OMPI_ERR_INIT_FINALIZE macro (meaning that MPI_INIT has not yet been
invoked or MPI_FINALIZE has already been invoked), then the
communicator argument that is passed to ompi_mpi_abort() is
meaningless and should not be consulted.

This commit was SVN r5313.
Этот коммит содержится в:
Jeff Squyres 2005-04-13 18:07:55 +00:00
родитель 3b5a9e7377
Коммит befac00371

Просмотреть файл

@ -76,18 +76,27 @@ ompi_mpi_abort(struct ompi_communicator_t* comm,
return ret; return ret;
} }
/* kill everyone in the remote group execpt our jobid, if requested */ /* Corner case: if we're being called as a result of the
if (kill_remote_of_intercomm && OMPI_COMM_IS_INTER(comm)) { OMPI_ERR_INIT_FINALIZE macro (meaning that this is before
abort_procs(comm->c_remote_group->grp_proc_pointers, MPI_INIT or after MPI_FINALIZE), then comm is not setup yet /
comm->c_remote_group->grp_proc_count, has already been cleaned up. */
if (ompi_mpi_initialized && !ompi_mpi_finalized) {
/* kill everyone in the remote group execpt our jobid, if
requested */
if (kill_remote_of_intercomm && OMPI_COMM_IS_INTER(comm)) {
abort_procs(comm->c_remote_group->grp_proc_pointers,
comm->c_remote_group->grp_proc_count,
my_jobid);
}
/* kill everyone in the local group, except our jobid. */
abort_procs(comm->c_local_group->grp_proc_pointers,
comm->c_local_group->grp_proc_count,
my_jobid); my_jobid);
} }
/* kill everyone in the local group, except our jobid */
abort_procs(comm->c_local_group->grp_proc_pointers,
comm->c_local_group->grp_proc_count,
my_jobid);
ret = orte_rmgr.terminate_job(my_jobid); ret = orte_rmgr.terminate_job(my_jobid);