diff --git a/ompi/datatype/convertor.c b/ompi/datatype/convertor.c index 2cef2a5b3a..3ca3057530 100644 --- a/ompi/datatype/convertor.c +++ b/ompi/datatype/convertor.c @@ -426,12 +426,12 @@ int32_t ompi_convertor_set_position_nocheck( ompi_convertor_t* convertor, OMPI_CONVERTOR_PREPARE( convertor, datatype, count, pUserBuf ); \ \ if( 0 == bdt_mask ) { \ - convertor->flags |= CONVERTOR_HOMOGENEOUS; \ convertor->remote_size = convertor->local_size; \ convertor->use_desc = &(datatype->opt_desc); \ } else { \ ompi_convertor_master_t* master; \ int i; \ + convertor->flags ^= CONVERTOR_HOMOGENEOUS; \ bdt_mask = datatype->bdt_used; \ master = convertor->master; \ convertor->remote_size = 0; \ @@ -450,9 +450,9 @@ int32_t ompi_convertor_set_position_nocheck( ompi_convertor_t* convertor, if( ((convertor->flags & (CONVERTOR_WITH_CHECKSUM | DT_FLAG_NO_GAPS)) \ == DT_FLAG_NO_GAPS) && \ (convertor->flags & (CONVERTOR_SEND | CONVERTOR_HOMOGENEOUS)) ) { \ - convertor->flags |= CONVERTOR_NO_OP; \ return OMPI_SUCCESS; \ } \ + convertor->flags ^= CONVERTOR_NO_OP; \ { \ uint32_t required_stack_length = datatype->btypes[DT_LOOP] + 1; \ \ diff --git a/ompi/datatype/convertor.h b/ompi/datatype/convertor.h index bfe1638e18..8aae6cced8 100644 --- a/ompi/datatype/convertor.h +++ b/ompi/datatype/convertor.h @@ -202,6 +202,7 @@ ompi_convertor_get_unpacked_size( const ompi_convertor_t* pConv, /* Grab the datatype part of the flags */ \ convertor->flags &= CONVERTOR_TYPE_MASK; \ convertor->flags |= (CONVERTOR_DATATYPE_MASK & datatype->flags); \ + convertor->flags |= (CONVERTOR_NO_OP | CONVERTOR_HOMOGENEOUS); \ convertor->pDesc = (ompi_datatype_t*)datatype; \ convertor->bConverted = 0; \ \ @@ -212,7 +213,7 @@ ompi_convertor_get_unpacked_size( const ompi_convertor_t* pConv, * the convertor->local_size but we can test the 2 components. \ */ \ if( 0 == (convertor->count | datatype->size) ) { \ - convertor->flags |= (CONVERTOR_COMPLETED | CONVERTOR_NO_OP); \ + convertor->flags |= CONVERTOR_COMPLETED; \ convertor->remote_size = 0; \ return OMPI_SUCCESS; \ } \ @@ -221,15 +222,12 @@ ompi_convertor_get_unpacked_size( const ompi_convertor_t* pConv, convertor->remote_size = convertor->local_size; \ convertor->use_desc = &(datatype->opt_desc); \ if( (convertor->flags & (CONVERTOR_WITH_CHECKSUM | DT_FLAG_NO_GAPS)) == DT_FLAG_NO_GAPS ) { \ - convertor->flags |= (CONVERTOR_NO_OP | CONVERTOR_HOMOGENEOUS); \ return OMPI_SUCCESS; \ } \ if( ((convertor->flags & (CONVERTOR_WITH_CHECKSUM | DT_FLAG_CONTIGUOUS)) \ == DT_FLAG_CONTIGUOUS) && (1 == count) ) { \ - convertor->flags |= (CONVERTOR_NO_OP | CONVERTOR_HOMOGENEOUS); \ return OMPI_SUCCESS; \ } \ - convertor->flags |= CONVERTOR_HOMOGENEOUS; \ } \ }