X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/051bd71525a329eea5c81d0588ccc76fdcd459f0..c73f2fe7c4b3dc6deeae12389ae22387928f0872:/src/smpi/smpi_base.c diff --git a/src/smpi/smpi_base.c b/src/smpi/smpi_base.c index b442f0dbfd..a48592d841 100644 --- a/src/smpi/smpi_base.c +++ b/src/smpi/smpi_base.c @@ -105,6 +105,8 @@ static void finish_wait(MPI_Request* request, MPI_Status* status) { status->MPI_SOURCE = (*request)->src; status->MPI_TAG = (*request)->tag; status->MPI_ERROR = MPI_SUCCESS; + status->_count = (*request)->size; // size in bytes + status->_cancelled = 0; // FIXME: cancellation of requests not handled yet } DEBUG3("finishing wait for %p [data = %p, complete = %d]", *request, data, data->complete); // data == *request if sender is first to finish its wait @@ -122,6 +124,7 @@ static void finish_wait(MPI_Request* request, MPI_Status* status) { // receiver cleans everything xbt_free(data); } + SIMIX_rdv_destroy((*request)->rdv); xbt_free(*request); } *request = MPI_REQUEST_NULL; @@ -159,6 +162,15 @@ int smpi_mpi_testany(int count, MPI_Request requests[], int* index, MPI_Status* return flag; } + +void smpi_mpi_get_count(MPI_Status *status, MPI_Datatype datatype, int *count) { + int size = smpi_datatype_size(datatype); + *count = (int)(status->_count / size); + if ( (int)((*count) * size) != status->_count ) + *count = MPI_UNDEFINED; +} + + void smpi_mpi_wait(MPI_Request* request, MPI_Status* status) { MPI_Request data = (*request)->data;