Hi folks
I keep getting segfault errors when testing 1.10, while others say the tests
are passing for them. The tests are in the onesided area, but I don’t believe
they necessarily are a onesided issue.
Specifically, the tests (e.g., test_start1.c) call MPI_Win_set_errhandler with
a NULL argument for the first parameter (MPI_win). Looking at the code for that
function, I see this:
int MPI_Win_set_errhandler(MPI_Win win, MPI_Errhandler errhandler)
{
MPI_Errhandler tmp;
OPAL_CR_NOOP_PROGRESS();
if (MPI_PARAM_CHECK) {
OMPI_ERR_INIT_FINALIZE(FUNC_NAME);
if (ompi_win_invalid(win)) {
return OMPI_ERRHANDLER_INVOKE(MPI_COMM_WORLD, MPI_ERR_WIN,
FUNC_NAME);
} else if (NULL == errhandler ||
MPI_ERRHANDLER_NULL == errhandler ||
(OMPI_ERRHANDLER_TYPE_WIN != errhandler->eh_mpi_object_type
&&
OMPI_ERRHANDLER_TYPE_PREDEFINED !=
errhandler->eh_mpi_object_type) ) {
return OMPI_ERRHANDLER_INVOKE(win, MPI_ERR_ARG, FUNC_NAME);
}
}
/* Prepare the new error handler */
OBJ_RETAIN(errhandler);
/* Ditch the old errhandler, and decrement its refcount. On 64
bits environments we have to make sure the reading of the
error_handler became atomic. */
do {
tmp = win->error_handler;
} while (!OPAL_ATOMIC_CMPSET(&(win->error_handler), tmp, errhandler));
OBJ_RELEASE(tmp);
/* All done */
return MPI_SUCCESS;
}
If someone built with —with-mpi-param-check=always or runtime, then this
function will return an error when given the NULL argument. Otherwise, it will
definitely segfault. According to the configure output, this option is supposed
to default to “runtime”. I don’t set it in my configury, so I would have
thought this was the case. And when I look at the config.log, I see:
configure:10401: checking if want run-time MPI parameter checking
configure:10425: result: runtime
However, what I’m seeing implies that this is *not* the case - i.e., we aren’t
checking MPI params, and hence I am crashing. Does anyone have any thoughts on
what could be going on? Is this test itself even correct?
Ralph