00001
00002
00003
00004
00005
00006
00007
00008 #include "mpioimpl.h"
00009 #include "adio_extern.h"
00010
00011 #ifdef HAVE_WEAK_SYMBOLS
00012
00013 #if defined(HAVE_PRAGMA_WEAK)
00014 #pragma weak MPI_File_set_errhandler = PMPI_File_set_errhandler
00015 #elif defined(HAVE_PRAGMA_HP_SEC_DEF)
00016 #pragma _HP_SECONDARY_DEF PMPI_File_set_errhandler MPI_File_set_errhandler
00017 #elif defined(HAVE_PRAGMA_CRI_DUP)
00018 #pragma _CRI duplicate MPI_File_set_errhandler as PMPI_File_set_errhandler
00019
00020 #endif
00021
00022
00023 #define MPIO_BUILD_PROFILING
00024 #include "mpioprof.h"
00025 #endif
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036 int MPI_File_set_errhandler(MPI_File mpi_fh, MPI_Errhandler errhandler)
00037 {
00038 int error_code = MPI_SUCCESS;
00039 static char myname[] = "MPI_FILE_SET_ERRHANDLER";
00040 ADIO_File fh;
00041 MPIU_THREADPRIV_DECL;
00042
00043 MPIU_THREAD_CS_ENTER(ALLFUNC,);
00044
00045 if (mpi_fh == MPI_FILE_NULL) {
00046 CtvAccess(ADIOI_DFLT_ERR_HANDLER) = errhandler;
00047 }
00048 else {
00049 fh = MPIO_File_resolve(mpi_fh);
00050
00051
00052 MPIO_CHECK_FILE_HANDLE(fh, myname, error_code);
00053
00054
00055 if ((errhandler != MPI_ERRORS_RETURN) &&
00056 (errhandler != MPI_ERRORS_ARE_FATAL))
00057 {
00058 error_code = MPIO_Err_create_code(MPI_SUCCESS,
00059 MPIR_ERR_RECOVERABLE,
00060 myname, __LINE__,
00061 MPI_ERR_UNSUPPORTED_OPERATION,
00062 "**fileopunsupported",
00063 0);
00064 error_code = MPIO_Err_return_file(fh, error_code);
00065 goto fn_exit;
00066 }
00067
00068 fh->err_handler = errhandler;
00069 }
00070
00071 fn_exit:
00072 MPIU_THREAD_CS_EXIT(ALLFUNC,);
00073 return error_code;
00074 }