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

Reply via email to