-:    0:Source:/home/MPI/testing/mpich2/mpich2/src/mpi/errhan/comm_get_errhandler.c
        -:    0:Graph:comm_get_errhandler.gcno
        -:    0:Data:comm_get_errhandler.gcda
        -:    0:Runs:523
        -:    0:Programs:144
        -:    1:/* -*- Mode: C; c-basic-offset:4 ; -*- */
        -:    2:/*
        -:    3: *
        -:    4: *  (C) 2001 by Argonne National Laboratory.
        -:    5: *      See COPYRIGHT in top-level directory.
        -:    6: */
        -:    7:
        -:    8:#include "mpiimpl.h"
        -:    9:
        -:   10:/* -- Begin Profiling Symbol Block for routine MPI_Comm_get_errhandler */
        -:   11:#if defined(HAVE_PRAGMA_WEAK)
        -:   12:#pragma weak MPI_Comm_get_errhandler = PMPI_Comm_get_errhandler
        -:   13:#elif defined(HAVE_PRAGMA_HP_SEC_DEF)
        -:   14:#pragma _HP_SECONDARY_DEF PMPI_Comm_get_errhandler  MPI_Comm_get_errhandler
        -:   15:#elif defined(HAVE_PRAGMA_CRI_DUP)
        -:   16:#pragma _CRI duplicate MPI_Comm_get_errhandler as PMPI_Comm_get_errhandler
        -:   17:#endif
        -:   18:/* -- End Profiling Symbol Block */
        -:   19:
        -:   20:/* Define MPICH_MPI_FROM_PMPI if weak symbols are not supported to build
        -:   21:   the MPI routines */
        -:   22:#ifndef MPICH_MPI_FROM_PMPI
        -:   23:#undef MPI_Comm_get_errhandler
        -:   24:#define MPI_Comm_get_errhandler PMPI_Comm_get_errhandler
        -:   25:
        -:   26:#endif
        -:   27:
        -:   28:#undef FUNCNAME
        -:   29:#define FUNCNAME MPI_Comm_get_errhandler
        -:   30:
        -:   31:/*@
        -:   32:   MPI_Comm_get_errhandler - Get the error handler attached to a communicator
        -:   33:
        -:   34:   Input Parameter:
        -:   35:. comm - communicator (handle) 
        -:   36:
        -:   37:   Output Parameter:
        -:   38:. errhandler - handler currently associated with communicator (handle) 
        -:   39:
        -:   40:.N ThreadSafeNoUpdate
        -:   41:
        -:   42:.N Fortran
        -:   43:
        -:   44:.N Errors
        -:   45:.N MPI_SUCCESS
        -:   46:.N MPI_ERR_COMM
        -:   47:@*/
        -:   48:int MPI_Comm_get_errhandler(MPI_Comm comm, MPI_Errhandler *errhandler)
       12:   49:{
        -:   50:#ifdef HAVE_ERROR_CHECKING
        -:   51:    static const char FCNAME[] = "MPI_Comm_get_errhandler";
        -:   52:#endif
       12:   53:    int mpi_errno = MPI_SUCCESS;
       12:   54:    MPID_Comm *comm_ptr = NULL;
       12:   55:    MPIU_THREADPRIV_DECL;
        -:   56:    MPID_MPI_STATE_DECL(MPID_STATE_MPI_COMM_GET_ERRHANDLER);
        -:   57:
       12:   58:    MPIR_ERRTEST_INITIALIZED_ORDIE();
        -:   59:    
       12:   60:    MPIU_THREAD_CS_ENTER(ALLFUNC,);
        -:   61:    MPID_MPI_FUNC_ENTER(MPID_STATE_MPI_COMM_GET_ERRHANDLER);
        -:   62:    
        -:   63:    /* Validate parameters, especially handles needing to be converted */
        -:   64:#   ifdef HAVE_ERROR_CHECKING
        -:   65:    {
        -:   66:        MPID_BEGIN_ERROR_CHECKS;
        -:   67:        {
       12:   68:	    MPIR_ERRTEST_COMM(comm, mpi_errno);
       12:   69:            if (mpi_errno != MPI_SUCCESS) goto fn_fail;
        -:   70:        }
        -:   71:        MPID_END_ERROR_CHECKS;
        -:   72:    }
        -:   73:#   endif
        -:   74:    
        -:   75:    /* Convert MPI object handles to object pointers */
       12:   76:    MPID_Comm_get_ptr( comm, comm_ptr );
        -:   77:    
        -:   78:    /* Validate parameters and objects (post conversion) */
        -:   79:#   ifdef HAVE_ERROR_CHECKING
        -:   80:    {
        -:   81:        MPID_BEGIN_ERROR_CHECKS;
        -:   82:        {
        -:   83:            /* Validate comm_ptr; if comm_ptr is not valid, it will be reset to null  */
       12:   84:            MPID_Comm_valid_ptr( comm_ptr, mpi_errno );
       12:   85:	    MPIR_ERRTEST_ARGNULL(errhandler,"errhandler",mpi_errno);
       12:   86:            if (mpi_errno) goto fn_fail;
        -:   87:        }
        -:   88:        MPID_END_ERROR_CHECKS;
        -:   89:    }
        -:   90:#   endif /* HAVE_ERROR_CHECKING */
        -:   91:
        -:   92:    /* ... body of routine ...  */
        -:   93:    
        -:   94:    /* Check for default error handler */
       12:   95:    if (!comm_ptr->errhandler) {
    #####:   96:	*errhandler = MPI_ERRORS_ARE_FATAL;
        -:   97:    }
        -:   98:    else {
       12:   99:	*errhandler = comm_ptr->errhandler->handle;
       12:  100:	MPIR_Errhandler_add_ref(comm_ptr->errhandler);
        -:  101:    }
        -:  102:    
        -:  103:    /* ... end of body of routine ... */
        -:  104:
        -:  105:#ifdef HAVE_ERROR_CHECKING
       12:  106:  fn_exit:
        -:  107:#endif
        -:  108:    MPID_MPI_FUNC_EXIT(MPID_STATE_MPI_COMM_GET_ERRHANDLER);
       12:  109:    MPIU_THREAD_CS_EXIT(ALLFUNC,);
       12:  110:    return mpi_errno;
        -:  111:
        -:  112:    /* --BEGIN ERROR HANDLING-- */
        -:  113:#   ifdef HAVE_ERROR_CHECKING
    #####:  114:  fn_fail:
        -:  115:    {
    #####:  116:	mpi_errno = MPIR_Err_create_code(
        -:  117:	    mpi_errno, MPIR_ERR_RECOVERABLE, FCNAME, __LINE__, MPI_ERR_OTHER,
        -:  118:	    "**mpi_comm_get_errhandler",
        -:  119:	    "**mpi_comm_get_errhandler %C %p", comm, errhandler);
        -:  120:    }
    #####:  121:    mpi_errno = MPIR_Err_return_comm( comm_ptr, FCNAME, mpi_errno );
    #####:  122:    goto fn_exit;
        -:  123:#   endif
        -:  124:    /* --END ERROR HANDLING-- */
        -:  125:}
        -:  126: