}
request->action =
SIMIX_req_comm_isend(mailbox, request->size, -1.0,
- request->buf, request->size, &match_send, request,
+ request->buf, request->size,
+ &match_send,
+ (void (*)(void *))&smpi_mpi_request_free, // how to free the userdata if a detached send fails
+ request,
// detach if msg size < eager/rdv switch limit
detached);
void smpi_mpi_wait(MPI_Request * request, MPI_Status * status)
{
print_request("Waiting", *request);
- if ((*request)->action != NULL )
- SIMIX_req_comm_wait((*request)->action, -1.0);
- finish_wait(request, status);
+ if ((*request)->action != NULL) { // this is not a detached send
+ SIMIX_req_comm_wait((*request)->action, -1.0);
+ finish_wait(request, status);
+ }
+ // FIXME for a detached send, finish_wait is not called:
}
int smpi_mpi_waitany(int count, MPI_Request requests[],