Blame src/mpi/init/ismain.c

Packit 0848f5
/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
Packit 0848f5
/*
Packit 0848f5
 *  (C) 2001 by Argonne National Laboratory.
Packit 0848f5
 *      See COPYRIGHT in top-level directory.
Packit 0848f5
 */
Packit 0848f5
Packit 0848f5
#include "mpiimpl.h"
Packit 0848f5
Packit 0848f5
/* -- Begin Profiling Symbol Block for routine MPI_Is_thread_main */
Packit 0848f5
#if defined(HAVE_PRAGMA_WEAK)
Packit 0848f5
#pragma weak MPI_Is_thread_main = PMPI_Is_thread_main
Packit 0848f5
#elif defined(HAVE_PRAGMA_HP_SEC_DEF)
Packit 0848f5
#pragma _HP_SECONDARY_DEF PMPI_Is_thread_main  MPI_Is_thread_main
Packit 0848f5
#elif defined(HAVE_PRAGMA_CRI_DUP)
Packit 0848f5
#pragma _CRI duplicate MPI_Is_thread_main as PMPI_Is_thread_main
Packit 0848f5
#elif defined(HAVE_WEAK_ATTRIBUTE)
Packit 0848f5
int MPI_Is_thread_main(int *flag) __attribute__((weak,alias("PMPI_Is_thread_main")));
Packit 0848f5
#endif
Packit 0848f5
/* -- End Profiling Symbol Block */
Packit 0848f5
Packit 0848f5
/* Define MPICH_MPI_FROM_PMPI if weak symbols are not supported to build
Packit 0848f5
   the MPI routines */
Packit 0848f5
#ifndef MPICH_MPI_FROM_PMPI
Packit 0848f5
#undef MPI_Is_thread_main
Packit 0848f5
#define MPI_Is_thread_main PMPI_Is_thread_main
Packit 0848f5
#endif
Packit 0848f5
Packit 0848f5
#undef FUNCNAME
Packit 0848f5
#define FUNCNAME MPI_Is_thread_main
Packit 0848f5
Packit 0848f5
/*@
Packit 0848f5
   MPI_Is_thread_main - Returns a flag indicating whether this thread called 
Packit 0848f5
                        'MPI_Init' or 'MPI_Init_thread'
Packit 0848f5
Packit 0848f5
Output Parameters:
Packit 0848f5
. flag - Flag is true if 'MPI_Init' or 'MPI_Init_thread' has been called by 
Packit 0848f5
         this thread and false otherwise.  (logical)
Packit 0848f5
Packit 0848f5
.N SignalSafe
Packit 0848f5
Packit 0848f5
.N Fortran
Packit 0848f5
Packit 0848f5
.N Errors
Packit 0848f5
.N MPI_SUCCESS
Packit 0848f5
@*/
Packit 0848f5
int MPI_Is_thread_main( int *flag )
Packit 0848f5
{
Packit 0848f5
#ifdef HAVE_ERROR_CHECKING
Packit 0848f5
    static const char FCNAME[] = "MPI_Is_thread_main";
Packit 0848f5
#endif
Packit 0848f5
    int mpi_errno = MPI_SUCCESS;
Packit 0848f5
    MPID_MPI_STATE_DECL(MPID_STATE_MPI_IS_THREAD_MAIN);
Packit 0848f5
Packit 0848f5
    MPIR_ERRTEST_INITIALIZED_ORDIE();
Packit 0848f5
#   ifdef HAVE_ERROR_CHECKING
Packit 0848f5
    {
Packit 0848f5
        MPID_BEGIN_ERROR_CHECKS;
Packit 0848f5
        {
Packit 0848f5
	    MPIR_ERRTEST_ARGNULL(flag,"flag",mpi_errno);
Packit 0848f5
        }
Packit 0848f5
        MPID_END_ERROR_CHECKS;
Packit 0848f5
    }
Packit 0848f5
#   endif /* HAVE_ERROR_CHECKING */
Packit 0848f5
    
Packit 0848f5
    MPID_MPI_FUNC_ENTER(MPID_STATE_MPI_IS_THREAD_MAIN);
Packit 0848f5
    
Packit 0848f5
    /* ... body of routine ...  */
Packit 0848f5
#   if MPICH_THREAD_LEVEL <= MPI_THREAD_FUNNELED || ! defined(MPICH_IS_THREADED)
Packit 0848f5
    {
Packit 0848f5
	*flag = TRUE;
Packit 0848f5
    }
Packit 0848f5
#   else
Packit 0848f5
    {
Packit 0848f5
	MPID_Thread_id_t my_thread_id;
Packit 0848f5
Packit 0848f5
	MPID_Thread_self(&my_thread_id);
Packit 0848f5
	MPID_Thread_same(&MPIR_ThreadInfo.master_thread, &my_thread_id, flag);
Packit 0848f5
    }
Packit 0848f5
#   endif
Packit 0848f5
    /* ... end of body of routine ... */
Packit 0848f5
Packit 0848f5
#ifdef HAVE_ERROR_CHECKING
Packit 0848f5
  fn_exit:
Packit 0848f5
#endif
Packit 0848f5
    MPID_MPI_FUNC_EXIT(MPID_STATE_MPI_IS_THREAD_MAIN);
Packit 0848f5
    return mpi_errno;
Packit 0848f5
    
Packit 0848f5
    /* --BEGIN ERROR HANDLING-- */
Packit 0848f5
#   ifdef HAVE_ERROR_CHECKING
Packit 0848f5
  fn_fail:
Packit 0848f5
    {
Packit 0848f5
	mpi_errno = MPIR_Err_create_code(
Packit 0848f5
	    mpi_errno, MPIR_ERR_RECOVERABLE, FCNAME, __LINE__, 
Packit 0848f5
	    MPI_ERR_OTHER, "**mpi_is_thread_main",
Packit 0848f5
	    "**mpi_is_thread_main %p", flag);
Packit 0848f5
    }
Packit 0848f5
    mpi_errno = MPIR_Err_return_comm( 0, FCNAME, mpi_errno );
Packit 0848f5
    goto fn_exit;
Packit 0848f5
#   endif
Packit 0848f5
    /* --END ERROR HANDLING-- */
Packit 0848f5
}