Skip to content

Commit b91779d

Browse files
authored
Merge pull request #6862 from ggouaillardet/topic/v3.1.x/pml_cm_bsend
pml/cm: check for request comp. before completing bsend.
2 parents 66ebb11 + 2275e9f commit b91779d

File tree

1 file changed

+27
-24
lines changed

1 file changed

+27
-24
lines changed

ompi/mca/pml/cm/pml_cm_sendreq.h

Lines changed: 27 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
* University of Stuttgart. All rights reserved.
1111
* Copyright (c) 2004-2006 The Regents of the University of California.
1212
* All rights reserved.
13-
* Copyright (c) 2015 Los Alamos National Security, LLC. All rights
13+
* Copyright (c) 2015-2017 Los Alamos National Security, LLC. All rights
1414
* reserved.
1515
* Copyright (c) 2015 Research Organization for Information Science
1616
* and Technology (RIST). All rights reserved.
@@ -382,28 +382,31 @@ do { \
382382
} while(0);
383383

384384

385-
#define MCA_PML_CM_HVY_SEND_REQUEST_START(sendreq, ret) \
386-
do { \
387-
ret = OMPI_SUCCESS; \
388-
MCA_PML_CM_SEND_REQUEST_START_SETUP(&(sendreq)->req_send); \
389-
if (sendreq->req_send.req_send_mode == MCA_PML_BASE_SEND_BUFFERED) { \
390-
MCA_PML_CM_HVY_SEND_REQUEST_BSEND_ALLOC(sendreq, ret); \
391-
} \
392-
if (OMPI_SUCCESS == ret) { \
393-
ret = OMPI_MTL_CALL(isend(ompi_mtl, \
394-
sendreq->req_send.req_base.req_comm, \
395-
sendreq->req_peer, \
396-
sendreq->req_tag, \
397-
&sendreq->req_send.req_base.req_convertor, \
398-
sendreq->req_send.req_send_mode, \
399-
sendreq->req_blocking, \
400-
&sendreq->req_mtl)); \
401-
if(OMPI_SUCCESS == ret && \
402-
sendreq->req_send.req_send_mode == MCA_PML_BASE_SEND_BUFFERED) { \
403-
sendreq->req_send.req_base.req_ompi.req_status.MPI_ERROR = 0; \
404-
ompi_request_complete(&(sendreq)->req_send.req_base.req_ompi, true); \
405-
} \
406-
} \
385+
#define MCA_PML_CM_HVY_SEND_REQUEST_START(sendreq, ret) \
386+
do { \
387+
ret = OMPI_SUCCESS; \
388+
MCA_PML_CM_SEND_REQUEST_START_SETUP(&(sendreq)->req_send); \
389+
if (sendreq->req_send.req_send_mode == MCA_PML_BASE_SEND_BUFFERED) { \
390+
MCA_PML_CM_HVY_SEND_REQUEST_BSEND_ALLOC(sendreq, ret); \
391+
} \
392+
if (OMPI_SUCCESS == ret) { \
393+
ret = OMPI_MTL_CALL(isend(ompi_mtl, \
394+
sendreq->req_send.req_base.req_comm, \
395+
sendreq->req_peer, \
396+
sendreq->req_tag, \
397+
&sendreq->req_send.req_base.req_convertor, \
398+
sendreq->req_send.req_send_mode, \
399+
sendreq->req_blocking, \
400+
&sendreq->req_mtl)); \
401+
if(OMPI_SUCCESS == ret && \
402+
sendreq->req_send.req_send_mode == MCA_PML_BASE_SEND_BUFFERED) { \
403+
sendreq->req_send.req_base.req_ompi.req_status.MPI_ERROR = 0; \
404+
if(!REQUEST_COMPLETE(&sendreq->req_send.req_base.req_ompi)) { \
405+
/* request may have already been marked complete by the MTL */ \
406+
ompi_request_complete(&(sendreq)->req_send.req_base.req_ompi, true); \
407+
} \
408+
} \
409+
} \
407410
} while (0)
408411

409412
/*
@@ -423,7 +426,7 @@ do {
423426
} \
424427
\
425428
if( !REQUEST_COMPLETE(&sendreq->req_send.req_base.req_ompi)) { \
426-
/* Should only be called for long messages (maybe synchronous) */ \
429+
/* the request may have already been marked complete by the MTL */ \
427430
ompi_request_complete(&(sendreq->req_send.req_base.req_ompi), true); \
428431
} \
429432
sendreq->req_send.req_base.req_pml_complete = true; \

0 commit comments

Comments
 (0)