
the way progress is done in the non-threaded case, adds a progress thread for the threaded progress case (which should be made to use George's progress engine when it is ready), and fixes some bugs with request handling, especially with freeing requests (IO requests, that is). This commit was SVN r4332.
80 строки
2.1 KiB
C
80 строки
2.1 KiB
C
/*
|
|
* Copyright (c) 2004-2005 The Trustees of Indiana University.
|
|
* All rights reserved.
|
|
* Copyright (c) 2004-2005 The Trustees of the University of Tennessee.
|
|
* All rights reserved.
|
|
* Copyright (c) 2004-2005 High Performance Computing Center Stuttgart,
|
|
* University of Stuttgart. All rights reserved.
|
|
* $COPYRIGHT$
|
|
*
|
|
* Additional copyrights may follow
|
|
*
|
|
* $HEADER$
|
|
*/
|
|
|
|
#include "ompi_config.h"
|
|
|
|
#include "mpi.h"
|
|
#include "mpi/c/bindings.h"
|
|
#include "communicator/communicator.h"
|
|
#include "errhandler/errhandler.h"
|
|
#include "file/file.h"
|
|
#include "mca/io/io.h"
|
|
#include "mca/io/base/io_base_request.h"
|
|
|
|
#if OMPI_HAVE_WEAK_SYMBOLS && OMPI_PROFILING_DEFINES
|
|
#pragma weak MPI_File_iread_shared = PMPI_File_iread_shared
|
|
#endif
|
|
|
|
#if OMPI_PROFILING_DEFINES
|
|
#include "mpi/c/profile/defines.h"
|
|
#endif
|
|
|
|
static const char FUNC_NAME[] = "MPI_File_iread_shared";
|
|
|
|
|
|
int MPI_File_iread_shared(MPI_File fh, void *buf, int count,
|
|
MPI_Datatype datatype, MPI_Request *request)
|
|
{
|
|
int rc;
|
|
mca_io_base_request_t *io_request;
|
|
|
|
if (MPI_PARAM_CHECK) {
|
|
rc = MPI_SUCCESS;
|
|
OMPI_ERR_INIT_FINALIZE(FUNC_NAME);
|
|
if (ompi_file_invalid(fh)) {
|
|
fh = MPI_FILE_NULL;
|
|
rc = MPI_ERR_FILE;
|
|
} else if (count < 0) {
|
|
rc = MPI_ERR_COUNT;
|
|
} else {
|
|
OMPI_CHECK_DATATYPE_FOR_RECV(rc, datatype, count);
|
|
}
|
|
OMPI_ERRHANDLER_CHECK(rc, fh, rc, FUNC_NAME);
|
|
}
|
|
|
|
/* Get a request */
|
|
|
|
if (OMPI_SUCCESS != mca_io_base_request_alloc(fh, &io_request)) {
|
|
return OMPI_ERRHANDLER_INVOKE(fh, MPI_ERR_NO_MEM, FUNC_NAME);
|
|
}
|
|
*request = (ompi_request_t*) io_request;
|
|
|
|
/* Call the back-end io component function */
|
|
|
|
switch (fh->f_io_version) {
|
|
case MCA_IO_BASE_V_1_0_0:
|
|
rc = fh->f_io_selected_module.v1_0_0.
|
|
io_module_file_iread_shared(fh, buf, count, datatype, io_request);
|
|
break;
|
|
|
|
default:
|
|
rc = MPI_ERR_INTERN;
|
|
break;
|
|
}
|
|
|
|
/* All done */
|
|
|
|
OMPI_ERRHANDLER_RETURN(rc, fh, rc, FUNC_NAME);
|
|
}
|