1
1

Correct the local send/recv function. It's mostly used on the collective functions.

This commit was SVN r5091.
Этот коммит содержится в:
George Bosilca 2005-03-29 17:50:38 +00:00
родитель a9e962d0a4
Коммит aaf1286847

Просмотреть файл

@ -57,14 +57,11 @@ int32_t ompi_ddt_sndrcv( void *sbuf, int32_t scount, const ompi_datatype_t* sdty
if (sdtype == rdtype) { if (sdtype == rdtype) {
max_data = ( scount < rcount ? scount : rcount ); max_data = ( scount < rcount ? scount : rcount );
ompi_ddt_copy_content_same_ddt(rdtype, max_data, (char*)rbuf, (char*)sbuf); ompi_ddt_copy_content_same_ddt(rdtype, max_data, (char*)rbuf, (char*)sbuf);
if( scount > rcount ) return ((scount > rcount) ? MPI_ERR_TRUNCATE : MPI_SUCCESS);
return MPI_ERR_TRUNCATE;
return MPI_SUCCESS;
} }
/* If receive packed. */ /* If receive packed. */
if (rdtype == MPI_PACKED) {
else if (rdtype == MPI_PACKED) {
send_convertor = OBJ_NEW(ompi_convertor_t); send_convertor = OBJ_NEW(ompi_convertor_t);
ompi_convertor_init_for_send( send_convertor, 0, sdtype, scount, sbuf, 0, NULL ); ompi_convertor_init_for_send( send_convertor, 0, sdtype, scount, sbuf, 0, NULL );
@ -74,14 +71,12 @@ int32_t ompi_ddt_sndrcv( void *sbuf, int32_t scount, const ompi_datatype_t* sdty
max_data = ( iov.iov_len > (scount * sdtype->size) ? (scount * sdtype->size) : iov.iov_len ); max_data = ( iov.iov_len > (scount * sdtype->size) ? (scount * sdtype->size) : iov.iov_len );
err = ompi_convertor_pack( send_convertor, &iov, &iov_count, &max_data, &freeAfter ); err = ompi_convertor_pack( send_convertor, &iov, &iov_count, &max_data, &freeAfter );
if( max_data < (uint32_t)rcount )
err = MPI_ERR_TRUNCATE;
OBJ_RELEASE( send_convertor ); OBJ_RELEASE( send_convertor );
return ((max_data < (uint32_t)rcount) ? MPI_ERR_TRUNCATE : MPI_SUCCESS);
} }
/* If send packed. */ /* If send packed. */
if (sdtype == MPI_PACKED) {
else if (sdtype == MPI_PACKED) {
recv_convertor = OBJ_NEW(ompi_convertor_t); recv_convertor = OBJ_NEW(ompi_convertor_t);
ompi_convertor_init_for_recv( recv_convertor, 0, rdtype, rcount, rbuf, 0, NULL ); ompi_convertor_init_for_recv( recv_convertor, 0, rdtype, rcount, rbuf, 0, NULL );
@ -94,6 +89,7 @@ int32_t ompi_ddt_sndrcv( void *sbuf, int32_t scount, const ompi_datatype_t* sdty
if( scount > (int32_t)(rcount * rdtype->size) ) if( scount > (int32_t)(rcount * rdtype->size) )
err = MPI_ERR_TRUNCATE; err = MPI_ERR_TRUNCATE;
OBJ_RELEASE( recv_convertor ); OBJ_RELEASE( recv_convertor );
return err;
} }
iov.iov_len = length = 64 * 1024; iov.iov_len = length = 64 * 1024;