in MPI/Request.cs [420:463]
public override void Cancel()
{
if (cachedStatus != null)
return;
int errorCode1 = Unsafe.MPI_SUCCESS;
int errorCode2 = Unsafe.MPI_SUCCESS;
Unsafe.MPI_Status status = new Unsafe.MPI_Status();
int flag = 0;
unsafe
{
// Cancel both MPI requests
if (requests.body != Unsafe.MPI_REQUEST_NULL)
{
errorCode1 = Unsafe.MPI_Cancel(ref requests.body);
if (errorCode1 == Unsafe.MPI_SUCCESS)
{
errorCode1 = Unsafe.MPI_Test(ref requests.body, out flag, out status);
}
}
if (requests.header != Unsafe.MPI_REQUEST_NULL)
{
errorCode2 = Unsafe.MPI_Cancel(ref requests.header);
if (errorCode2 == Unsafe.MPI_SUCCESS)
{
int myFlag = 0;
errorCode2 = Unsafe.MPI_Test(ref requests.body, out myFlag, out status);
if (myFlag != 0 && flag == 0)
flag = myFlag;
}
}
}
Cleanup();
if (errorCode1 != Unsafe.MPI_SUCCESS)
throw Environment.TranslateErrorIntoException(errorCode1);
if (errorCode2 != Unsafe.MPI_SUCCESS)
throw Environment.TranslateErrorIntoException(errorCode2);
if (flag != 0)
cachedStatus = new CompletedStatus(status, 0);
}