From: Augustin Degomme Date: Tue, 9 Apr 2013 15:02:32 +0000 (+0200) Subject: remove a few more leaks to please valgrind, but nothing important X-Git-Tag: v3_9_90~412^2~26 X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/commitdiff_plain/02a13cd46eff988e8fad0711433787059f72b319?hp=5b4af899ae1e314c194978a4edca092148e40ccc remove a few more leaks to please valgrind, but nothing important --- diff --git a/src/smpi/smpi_base.c b/src/smpi/smpi_base.c index f5a219247d..e0cfc66d28 100644 --- a/src/smpi/smpi_base.c +++ b/src/smpi/smpi_base.c @@ -369,6 +369,7 @@ void smpi_mpi_start(MPI_Request request) } XBT_DEBUG("Send request %p is detached; buf %p copied into %p",request,oldbuf,request->buf); } + // we make a copy here, as the size is modified by simix, and we may reuse the request in another receive later request->real_size=request->size; smpi_datatype_use(request->old_type); @@ -508,8 +509,11 @@ void smpi_mpi_send(void *buf, int count, MPI_Datatype datatype, int dst, void smpi_mpi_ssend(void *buf, int count, MPI_Datatype datatype, int dst, int tag, MPI_Comm comm) { - MPI_Request request = smpi_mpi_issend(buf, count, datatype, dst, tag, comm); - smpi_mpi_wait(&request, MPI_STATUS_IGNORE); + MPI_Request request = + build_request(buf, count, datatype, smpi_comm_rank(comm), dst, tag, + comm, NON_PERSISTENT | SSEND | SEND); + + smpi_mpi_start(request); smpi_mpi_wait(&request, MPI_STATUS_IGNORE); } void smpi_mpi_sendrecv(void *sendbuf, int sendcount, MPI_Datatype sendtype, diff --git a/src/smpi/smpi_f77.c b/src/smpi/smpi_f77.c index d782052c73..f7a1583bbb 100644 --- a/src/smpi/smpi_f77.c +++ b/src/smpi/smpi_f77.c @@ -99,50 +99,51 @@ static MPI_Op get_op(int op) { } void mpi_init_(int* ierr) { - comm_lookup = xbt_dynar_new(sizeof(MPI_Comm), NULL); - new_comm(MPI_COMM_WORLD); - group_lookup = xbt_dynar_new(sizeof(MPI_Group), NULL); - - request_lookup = xbt_dict_new_homogeneous(NULL); - - datatype_lookup = xbt_dynar_new(sizeof(MPI_Datatype), NULL); - new_datatype(MPI_BYTE); - new_datatype(MPI_CHAR); - new_datatype(MPI_INT); - new_datatype(MPI_INT); - new_datatype(MPI_INT8_T); - new_datatype(MPI_INT16_T); - new_datatype(MPI_INT32_T); - new_datatype(MPI_INT64_T); - new_datatype(MPI_FLOAT); - new_datatype(MPI_FLOAT); - new_datatype(MPI_DOUBLE); - new_datatype(MPI_DOUBLE); - new_datatype(MPI_C_FLOAT_COMPLEX); - new_datatype(MPI_C_DOUBLE_COMPLEX); - new_datatype(MPI_2INT); - new_datatype(MPI_UINT8_T); - new_datatype(MPI_UINT16_T); - new_datatype(MPI_UINT32_T); - new_datatype(MPI_UINT64_T); - new_datatype(MPI_2FLOAT); - new_datatype(MPI_2DOUBLE); - - - op_lookup = xbt_dynar_new(sizeof(MPI_Op), NULL); - new_op(MPI_MAX); - new_op(MPI_MIN); - new_op(MPI_MAXLOC); - new_op(MPI_MINLOC); - new_op(MPI_SUM); - new_op(MPI_PROD); - new_op(MPI_LAND); - new_op(MPI_LOR); - new_op(MPI_LXOR); - new_op(MPI_BAND); - new_op(MPI_BOR); - new_op(MPI_BXOR); - + if(!comm_lookup){ + comm_lookup = xbt_dynar_new(sizeof(MPI_Comm), NULL); + new_comm(MPI_COMM_WORLD); + group_lookup = xbt_dynar_new(sizeof(MPI_Group), NULL); + + request_lookup = xbt_dict_new_homogeneous(NULL); + + datatype_lookup = xbt_dynar_new(sizeof(MPI_Datatype), NULL); + new_datatype(MPI_BYTE); + new_datatype(MPI_CHAR); + new_datatype(MPI_INT); + new_datatype(MPI_INT); + new_datatype(MPI_INT8_T); + new_datatype(MPI_INT16_T); + new_datatype(MPI_INT32_T); + new_datatype(MPI_INT64_T); + new_datatype(MPI_FLOAT); + new_datatype(MPI_FLOAT); + new_datatype(MPI_DOUBLE); + new_datatype(MPI_DOUBLE); + new_datatype(MPI_C_FLOAT_COMPLEX); + new_datatype(MPI_C_DOUBLE_COMPLEX); + new_datatype(MPI_2INT); + new_datatype(MPI_UINT8_T); + new_datatype(MPI_UINT16_T); + new_datatype(MPI_UINT32_T); + new_datatype(MPI_UINT64_T); + new_datatype(MPI_2FLOAT); + new_datatype(MPI_2DOUBLE); + + + op_lookup = xbt_dynar_new(sizeof(MPI_Op), NULL); + new_op(MPI_MAX); + new_op(MPI_MIN); + new_op(MPI_MAXLOC); + new_op(MPI_MINLOC); + new_op(MPI_SUM); + new_op(MPI_PROD); + new_op(MPI_LAND); + new_op(MPI_LOR); + new_op(MPI_LXOR); + new_op(MPI_BAND); + new_op(MPI_BOR); + new_op(MPI_BXOR); + } /* smpif2c is responsible for generating a call with the final arguments */ *ierr = MPI_Init(NULL, NULL); }