[mpich2-commits] r7659 - mpich2/trunk/src/mpi/pt2pt
goodell at mcs.anl.gov
goodell at mcs.anl.gov
Tue Jan 4 13:51:27 CST 2011
Author: goodell
Date: 2011-01-04 13:51:27 -0600 (Tue, 04 Jan 2011)
New Revision: 7659
Modified:
mpich2/trunk/src/mpi/pt2pt/bsendutil.c
Log:
bugfix: MPIR_Buffer_attach alignment was inconsistent, fixes #1149
Reviewed by buntinas at .
Modified: mpich2/trunk/src/mpi/pt2pt/bsendutil.c
===================================================================
--- mpich2/trunk/src/mpi/pt2pt/bsendutil.c 2011-01-04 18:37:49 UTC (rev 7658)
+++ mpich2/trunk/src/mpi/pt2pt/bsendutil.c 2011-01-04 19:51:27 UTC (rev 7659)
@@ -93,7 +93,7 @@
int MPIR_Bsend_attach( void *buffer, int buffer_size )
{
MPIR_Bsend_data_t *p;
- long offset;
+ size_t offset, align_sz;
# ifdef HAVE_ERROR_CHECKING
{
@@ -128,11 +128,14 @@
BsendBuffer.origbuffer_size = buffer_size;
BsendBuffer.buffer = buffer;
BsendBuffer.buffer_size = buffer_size;
- offset = ((long)buffer) % sizeof(void *);
+
+ /* Make sure that the buffer that we use is aligned to align_sz. Some other
+ code assumes pointer-alignment, and some code assumes double alignment
+ (see #1149). */
+ align_sz = MPIR_MAX(sizeof(void *), sizeof(double));
+ offset = ((size_t)buffer) % sizeof(void *);
if (offset) {
- /* Make sure that the buffer that we use is aligned for pointers,
- because the code assumes that */
- offset = sizeof(void *) - offset;
+ offset = align_sz - offset;
buffer = (char *)buffer + offset;
BsendBuffer.buffer = buffer;
BsendBuffer.buffer_size -= offset;
@@ -145,7 +148,7 @@
p = (MPIR_Bsend_data_t *)buffer;
p->size = buffer_size - BSENDDATA_HEADER_TRUE_SIZE;
p->total_size = buffer_size;
- p->next = p->prev = 0;
+ p->next = p->prev = NULL;
p->msg.msgbuf = (char *)p + BSENDDATA_HEADER_TRUE_SIZE;
return MPI_SUCCESS;
More information about the mpich2-commits
mailing list