00001
00002
00003
00004
00005
00006
00007
00008
00009 #include "mpioimpl.h"
00010 #include "adio_extern.h"
00011
00012 #ifdef HAVE_WEAK_SYMBOLS
00013
00014 #if defined(HAVE_PRAGMA_WEAK)
00015 #pragma weak MPI_File_set_errhandler = PMPI_File_set_errhandler
00016 #elif defined(HAVE_PRAGMA_HP_SEC_DEF)
00017 #pragma _HP_SECONDARY_DEF PMPI_File_set_errhandler MPI_File_set_errhandler
00018 #elif defined(HAVE_PRAGMA_CRI_DUP)
00019 #pragma _CRI duplicate MPI_File_set_errhandler as PMPI_File_set_errhandler
00020
00021 #endif
00022
00023
00024 #define MPIO_BUILD_PROFILING
00025 #include "mpioprof.h"
00026 #endif
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037 int MPI_File_set_errhandler(MPI_File fh, MPI_Errhandler errhandler)
00038 {
00039 int error_code = MPI_SUCCESS;
00040 #ifndef PRINT_ERR_MSG
00041 static char myname[] = "MPI_FILE_SET_ERRHANDLER";
00042 #endif
00043
00044 if ((errhandler != MPI_ERRORS_RETURN) || (errhandler != MPI_ERRORS_ARE_FATAL)) {
00045 FPRINTF(stderr, "Only MPI_ERRORS_RETURN and MPI_ERRORS_ARE_FATAL are currently supported for MPI_File_set_errhandler\n");
00046 MPI_Abort(MPI_COMM_WORLD, 1);
00047 }
00048
00049 if (fh == MPI_FILE_NULL) ADIOI_DFLT_ERR_HANDLER = errhandler;
00050 else if (fh->cookie != ADIOI_FILE_COOKIE) {
00051 #ifdef PRINT_ERR_MSG
00052 FPRINTF(stderr, "MPI_File_close: Invalid file handle\n");
00053 MPI_Abort(MPI_COMM_WORLD, 1);
00054 #else
00055 error_code = MPIR_Err_setmsg(MPI_ERR_FILE, MPIR_ERR_FILE_CORRUPT,
00056 myname, (char *) 0, (char *) 0);
00057 return ADIOI_Error(MPI_FILE_NULL, error_code, myname);
00058 #endif
00059 }
00060 else fh->err_handler = errhandler;
00061
00062 return error_code;
00063 }