This source file includes following definitions.
- MPI_Mrecv
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 #include "ompi_config.h"
17
18 #include "ompi/mpi/c/bindings.h"
19 #include "ompi/runtime/params.h"
20 #include "ompi/mca/pml/pml.h"
21 #include "ompi/memchecker.h"
22 #include "ompi/request/request.h"
23 #include "ompi/message/message.h"
24 #include "ompi/runtime/ompi_spc.h"
25
26 #if OMPI_BUILD_MPI_PROFILING
27 #if OPAL_HAVE_WEAK_SYMBOLS
28 #pragma weak MPI_Mrecv = PMPI_Mrecv
29 #endif
30 #define MPI_Mrecv PMPI_Mrecv
31 #endif
32
33 static const char FUNC_NAME[] = "MPI_Mrecv";
34
35
36 int MPI_Mrecv(void *buf, int count, MPI_Datatype type,
37 MPI_Message *message, MPI_Status *status)
38 {
39 int rc = MPI_SUCCESS;
40 ompi_communicator_t *comm;
41
42 SPC_RECORD(OMPI_SPC_MRECV, 1);
43
44 MEMCHECKER(
45 memchecker_datatype(type);
46 memchecker_message(message);
47 memchecker_call(&opal_memchecker_base_isaddressable, buf, count, type);
48 memchecker_comm(comm);
49 );
50
51 if ( MPI_PARAM_CHECK ) {
52 OMPI_ERR_INIT_FINALIZE(FUNC_NAME);
53 OMPI_CHECK_DATATYPE_FOR_RECV(rc, type, count);
54 OMPI_CHECK_USER_BUFFER(rc, buf, type, count);
55
56 if (NULL == message || MPI_MESSAGE_NULL == *message) {
57 rc = MPI_ERR_REQUEST;
58 comm = MPI_COMM_NULL;
59 } else {
60 comm = (*message)->comm;
61 }
62
63 OMPI_ERRHANDLER_CHECK(rc, comm, rc, FUNC_NAME);
64 } else {
65 comm = (*message)->comm;
66 }
67
68 if (&ompi_message_no_proc.message == *message) {
69 if (MPI_STATUS_IGNORE != status) {
70 *status = ompi_request_empty.req_status;
71 }
72 *message = MPI_MESSAGE_NULL;
73 return MPI_SUCCESS;
74 }
75
76 OPAL_CR_ENTER_LIBRARY();
77
78 rc = MCA_PML_CALL(mrecv(buf, count, type, message, status));
79
80
81 MEMCHECKER(
82 opal_memchecker_base_mem_undefined(&status->MPI_ERROR, sizeof(int));
83 );
84
85 OMPI_ERRHANDLER_RETURN(rc, comm, rc, FUNC_NAME);
86 }