From 9525583d6612c7d14d18a8fae58cb9665bacb2a0 Mon Sep 17 00:00:00 2001 From: Gilles Gouaillardet Date: Mon, 19 Oct 2015 16:47:59 +0900 Subject: [PATCH] coll/base: fix memory allocation in mca_coll_basic_alltoall_intra_inplace (back-ported from commit open-mpi/ompi@0f23037775d215e021d4631ac2d43bcb02ee9a3e) --- ompi/mca/coll/basic/coll_basic_alltoall.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/ompi/mca/coll/basic/coll_basic_alltoall.c b/ompi/mca/coll/basic/coll_basic_alltoall.c index 5fedab92ce..1982e9557a 100644 --- a/ompi/mca/coll/basic/coll_basic_alltoall.c +++ b/ompi/mca/coll/basic/coll_basic_alltoall.c @@ -43,7 +43,7 @@ mca_coll_basic_alltoall_intra_inplace(void *rbuf, int rcount, MPI_Request *preq; char *tmp_buffer; size_t max_size; - ptrdiff_t ext; + ptrdiff_t ext, true_lb, true_ext; /* Initialize. */ @@ -57,13 +57,15 @@ mca_coll_basic_alltoall_intra_inplace(void *rbuf, int rcount, /* Find the largest receive amount */ ompi_datatype_type_extent (rdtype, &ext); - max_size = ext * rcount; + ompi_datatype_get_true_extent ( rdtype, &true_lb, &true_ext); + max_size = true_ext + ext * (rcount-1); /* Allocate a temporary buffer */ tmp_buffer = calloc (max_size, 1); if (NULL == tmp_buffer) { return OMPI_ERR_OUT_OF_RESOURCE; } + max_size = ext * rcount; /* in-place alltoall slow algorithm (but works) */ for (i = 0 ; i < size ; ++i) {