00001
00002
00003
00004
00005
00006
00007
00008
00009 #include "mpioimpl.h"
00010
00011 #ifdef HAVE_WEAK_SYMBOLS
00012
00013 #if defined(HAVE_PRAGMA_WEAK)
00014 #pragma weak MPIO_Wait = PMPIO_Wait
00015 #elif defined(HAVE_PRAGMA_HP_SEC_DEF)
00016 #pragma _HP_SECONDARY_DEF PMPIO_Wait MPIO_Wait
00017 #elif defined(HAVE_PRAGMA_CRI_DUP)
00018 #pragma _CRI duplicate MPIO_Wait as PMPIO_Wait
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
00037
00038
00039
00040 int MPIO_Wait(MPIO_Request *request, MPI_Status *status)
00041 {
00042 int error_code;
00043 #ifndef PRINT_ERR_MSG
00044 static char myname[] = "MPIO_WAIT";
00045 #endif
00046 #ifdef MPI_hpux
00047 int fl_xmpi;
00048
00049 if (*request != MPIO_REQUEST_NULL) {
00050 HPMP_IO_WSTART(fl_xmpi, BLKMPIOWAIT, TRDTBLOCK, (*request)->fd);
00051 }
00052 #endif
00053
00054 if (*request == MPIO_REQUEST_NULL) return MPI_SUCCESS;
00055
00056 if ((*request < (MPIO_Request) 0) ||
00057 ((*request)->cookie != ADIOI_REQ_COOKIE)) {
00058 #ifdef PRINT_ERR_MSG
00059 FPRINTF(stderr, "MPIO_Wait: Invalid request object\n");
00060 MPI_Abort(MPI_COMM_WORLD, 1);
00061 #else
00062 error_code = MPIR_Err_setmsg(MPI_ERR_REQUEST, MPIR_ERR_REQUEST_NULL,
00063 myname, (char *) 0, (char *) 0);
00064 return ADIOI_Error(MPI_FILE_NULL, error_code, myname);
00065 #endif
00066 }
00067
00068 switch ((*request)->optype) {
00069 case ADIOI_READ:
00070 ADIO_ReadComplete(request, status, &error_code);
00071 break;
00072 case ADIOI_WRITE:
00073 ADIO_WriteComplete(request, status, &error_code);
00074 break;
00075 }
00076
00077 #ifdef MPI_hpux
00078 HPMP_IO_WEND(fl_xmpi);
00079 #endif
00080 return error_code;
00081 }