From d37b09424c4b4e8d5b59c575b5b1b3d1b7c252ee Mon Sep 17 00:00:00 2001 From: suter Date: Mon, 10 Sep 2012 10:58:13 +0200 Subject: [PATCH] add some test to not perform some memcpy. Mandatory for trace replay on top of SMPI. We don't care about data, so the send and recv buffers are always NULL. memcpy doesn't like that at all. --- src/smpi/smpi_base.c | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/src/smpi/smpi_base.c b/src/smpi/smpi_base.c index 9ff9da7e0a..ff3b8554cb 100644 --- a/src/smpi/smpi_base.c +++ b/src/smpi/smpi_base.c @@ -144,7 +144,8 @@ void smpi_mpi_start(MPI_Request request) void *oldbuf = request->buf; detached = 1; request->buf = malloc(request->size); - memcpy(request->buf,oldbuf,request->size); + if (oldbuf) + 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); @@ -690,7 +691,8 @@ void smpi_mpi_reduce(void *sendbuf, void *recvbuf, int count, // FIXME: check for errors smpi_datatype_extent(datatype, &lb, &dataext); // Local copy from root - smpi_datatype_copy(sendbuf, count, datatype, recvbuf, count, datatype); + if (sendbuf && recvbuf) + smpi_datatype_copy(sendbuf, count, datatype, recvbuf, count, datatype); // Receive buffers from senders //TODO: make a MPI_barrier here ? requests = xbt_new(MPI_Request, size - 1); @@ -715,7 +717,8 @@ void smpi_mpi_reduce(void *sendbuf, void *recvbuf, int count, if(index == MPI_UNDEFINED) { break; } - smpi_op_apply(op, tmpbufs[index], recvbuf, &count, &datatype); + if(op) /* op can be MPI_OP_NULL that does nothing */ + smpi_op_apply(op, tmpbufs[index], recvbuf, &count, &datatype); } for(index = 0; index < size - 1; index++) { xbt_free(tmpbufs[index]); -- 2.20.1