@@ -49,14 +49,14 @@ pack_predefined_data( opal_convertor_t* CONVERTOR,
4949 /* premptively update the number of COUNT we will return. */
5050 * (COUNT ) -= cando_count ;
5151
52- if ( 1 == _elem -> count ) { /* Everything is contiguous, handle it as a prologue */
52+ if ( 1 == _elem -> count ) { /* Everything is contiguous, handle it as the last contiguous piece */
5353 goto do_epilog ;
5454 }
5555 if ( 1 == _elem -> blocklen ) { /* Do as many full blocklen as possible */
5656 for (; cando_count > 0 ; cando_count -- ) {
5757 OPAL_DATATYPE_SAFEGUARD_POINTER ( _memory , blocklen_bytes , (CONVERTOR )-> pBaseBuf ,
5858 (CONVERTOR )-> pDesc , (CONVERTOR )-> count );
59- DO_DEBUG ( opal_output ( 0 , "pack 2. memcpy( %p, %p, %lu ) => space %lu\n" ,
59+ DO_DEBUG ( opal_output ( 0 , "pack memcpy( %p, %p, %lu ) => space %lu [blen = 1] \n" ,
6060 (void * )_packed , (void * )_memory , (unsigned long )blocklen_bytes , (unsigned long )(* (SPACE ) - (_packed - * (packed ))) ); );
6161 MEMCPY_CSUM ( _packed , _memory , blocklen_bytes , (CONVERTOR ) );
6262 _packed += blocklen_bytes ;
@@ -75,23 +75,21 @@ pack_predefined_data( opal_convertor_t* CONVERTOR,
7575 * should be manipulated in the current call (this number is instead reflected on the
7676 * SPACE).
7777 */
78- do_now = do_now % _elem -> blocklen ; /* any partial elements ? */
79-
80- if ( 0 != do_now ) {
78+ if ( 0 != (do_now = do_now % _elem -> blocklen ) ) { /* any partial elements ? */
8179 size_t left_in_block = do_now ; /* left in the current blocklen */
82- do_now = (do_now > cando_count ) ? cando_count : do_now ;
80+ do_now = (do_now > cando_count ) ? cando_count : do_now ;
8381 do_now_bytes = do_now * opal_datatype_basicDatatypes [_elem -> common .type ]-> size ;
8482
8583 OPAL_DATATYPE_SAFEGUARD_POINTER ( _memory , do_now_bytes , (CONVERTOR )-> pBaseBuf ,
8684 (CONVERTOR )-> pDesc , (CONVERTOR )-> count );
87- DO_DEBUG ( opal_output ( 0 , "pack 1. memcpy( %p, %p, %lu ) => space %lu [prolog]\n" ,
85+ DO_DEBUG ( opal_output ( 0 , "pack memcpy( %p, %p, %lu ) => space %lu [prolog]\n" ,
8886 _packed , (void * )_memory , (unsigned long )do_now_bytes , (unsigned long )(* (SPACE )) ); );
8987 MEMCPY_CSUM ( _packed , _memory , do_now_bytes , (CONVERTOR ) );
88+ _packed += do_now_bytes ;
9089 _memory += (ptrdiff_t )do_now_bytes ;
91- /* compensate if we just completed a blocklen */
92- if ( do_now == left_in_block )
90+
91+ if ( do_now == left_in_block ) /* compensate if completed a blocklen */
9392 _memory += _elem -> extent - blocklen_bytes ;
94- _packed += do_now_bytes ;
9593 cando_count -= do_now ;
9694 }
9795
@@ -119,7 +117,7 @@ pack_predefined_data( opal_convertor_t* CONVERTOR,
119117 OPAL_DATATYPE_SAFEGUARD_POINTER ( _memory , do_now_bytes , (CONVERTOR )-> pBaseBuf ,
120118 (CONVERTOR )-> pDesc , (CONVERTOR )-> count );
121119 DO_DEBUG ( opal_output ( 0 , "pack 3. memcpy( %p, %p, %lu ) => space %lu [epilog]\n" ,
122- (void * )_packed , (void * )_memory , (unsigned long )do_now_bytes , (unsigned long )(* (SPACE )) ); );
120+ (void * )_packed , (void * )_memory , (unsigned long )do_now_bytes , (unsigned long )(* (SPACE ) - ( _packed - * ( packed )) ) ); );
123121 MEMCPY_CSUM ( _packed , _memory , do_now_bytes , (CONVERTOR ) );
124122 _memory += do_now_bytes ;
125123 _packed += do_now_bytes ;
0 commit comments