detached = 1;
request->buf = malloc(request->size);
memcpy(request->buf,oldbuf,request->size);
+ XBT_DEBUG("Send request %p is detached; buf %p copied into %p",request,oldbuf,request->buf);
+ } else {
+ XBT_DEBUG("Send request %p is not detached (buf: %p)",request,request->buf);
}
-
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[],