00001
00002
00003
00004
00005
00006
00007
00008
00009 #include "ad_pfs.h"
00010
00011 int ADIOI_PFS_ReadDone(ADIO_Request *request, ADIO_Status *status, int *error_code)
00012 {
00013 int done=0;
00014 #ifndef PRINT_ERR_MSG
00015 static char myname[] = "ADIOI_PFS_READDONE";
00016 #endif
00017
00018 if (*request == ADIO_REQUEST_NULL) {
00019 *error_code = MPI_SUCCESS;
00020 return 1;
00021 }
00022
00023 if ((*request)->queued)
00024 done = _iodone(*((long *) (*request)->handle));
00025 else done = 1;
00026
00027
00028 #ifdef HAVE_STATUS_SET_BYTES
00029 if ((done >= 0) && ((*request)->nbytes != -1))
00030 MPIR_Status_set_bytes(status, (*request)->datatype, (*request)->nbytes);
00031 #endif
00032
00033 if (done >= 0) {
00034
00035
00036 if ((*request)->queued) ADIOI_Del_req_from_list(request);
00037
00038 (*request)->fd->async_count--;
00039 if ((*request)->handle) ADIOI_Free((*request)->handle);
00040 ADIOI_Free_request((ADIOI_Req_node *) (*request));
00041 *request = ADIO_REQUEST_NULL;
00042 }
00043
00044 #ifdef PRINT_ERR_MSG
00045 *error_code = (done == -1 && errno != 0) ? MPI_ERR_UNKNOWN : MPI_SUCCESS;
00046 #else
00047 if (done == -1 && errno != 0) {
00048 *error_code = MPIR_Err_setmsg(MPI_ERR_IO, MPIR_ADIO_ERROR,
00049 myname, "I/O Error", "%s", strerror(errno));
00050 ADIOI_Error((*request)->fd, *error_code, myname);
00051 }
00052 else *error_code = MPI_SUCCESS;
00053 #endif
00054 return done;
00055 }
00056
00057
00058 int ADIOI_PFS_WriteDone(ADIO_Request *request, ADIO_Status *status, int *error_code)
00059 {
00060 return ADIOI_PFS_ReadDone(request, status, error_code);
00061 }