Hi,
Seems like it's impossible to cancel buffered sends with pml/cm.
>From one hand, pml/cm completes the buffered send immediately
>(MCA_PML_CM_HVY_SEND_REQUEST_START):
if(OMPI_SUCCESS == ret &&
\
sendreq->req_send.req_send_mode == MCA_PML_BASE_SEND_BUFFERED) {
\
sendreq->req_send.req_base.req_ompi.req_status.MPI_ERROR = 0;
\
ompi_request_complete(&(sendreq)->req_send.req_base.req_ompi,
true); \
}
So, if the user is doing Bsend()/Cancel()/Wait()/Test_canceled(), the Wait()
would be a no-op.
Therefore when mtl_cancel() was called, it had to either cancel/guarantee
completion *immediately*, otherwise the return from Test_canceled would be
undefined.
However, it's not always possible to cancel immediately, because need to make
sure the peer has not matched it yet (fox example, with mtl mxm).
IMHO it's wrong for pml_cm to complete a buffered send immediately.
What do you think?
--Yossi