@@ -49,14 +49,14 @@ pack_predefined_data( opal_convertor_t* CONVERTOR,
49
49
/* premptively update the number of COUNT we will return. */
50
50
* (COUNT ) -= cando_count ;
51
51
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 */
53
53
goto do_epilog ;
54
54
}
55
55
if ( 1 == _elem -> blocklen ) { /* Do as many full blocklen as possible */
56
56
for (; cando_count > 0 ; cando_count -- ) {
57
57
OPAL_DATATYPE_SAFEGUARD_POINTER ( _memory , blocklen_bytes , (CONVERTOR )-> pBaseBuf ,
58
58
(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" ,
60
60
(void * )_packed , (void * )_memory , (unsigned long )blocklen_bytes , (unsigned long )(* (SPACE ) - (_packed - * (packed ))) ); );
61
61
MEMCPY_CSUM ( _packed , _memory , blocklen_bytes , (CONVERTOR ) );
62
62
_packed += blocklen_bytes ;
@@ -75,23 +75,21 @@ pack_predefined_data( opal_convertor_t* CONVERTOR,
75
75
* should be manipulated in the current call (this number is instead reflected on the
76
76
* SPACE).
77
77
*/
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 ? */
81
79
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 ;
83
81
do_now_bytes = do_now * opal_datatype_basicDatatypes [_elem -> common .type ]-> size ;
84
82
85
83
OPAL_DATATYPE_SAFEGUARD_POINTER ( _memory , do_now_bytes , (CONVERTOR )-> pBaseBuf ,
86
84
(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" ,
88
86
_packed , (void * )_memory , (unsigned long )do_now_bytes , (unsigned long )(* (SPACE )) ); );
89
87
MEMCPY_CSUM ( _packed , _memory , do_now_bytes , (CONVERTOR ) );
88
+ _packed += do_now_bytes ;
90
89
_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 */
93
92
_memory += _elem -> extent - blocklen_bytes ;
94
- _packed += do_now_bytes ;
95
93
cando_count -= do_now ;
96
94
}
97
95
@@ -119,7 +117,7 @@ pack_predefined_data( opal_convertor_t* CONVERTOR,
119
117
OPAL_DATATYPE_SAFEGUARD_POINTER ( _memory , do_now_bytes , (CONVERTOR )-> pBaseBuf ,
120
118
(CONVERTOR )-> pDesc , (CONVERTOR )-> count );
121
119
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 )) ) ); );
123
121
MEMCPY_CSUM ( _packed , _memory , do_now_bytes , (CONVERTOR ) );
124
122
_memory += do_now_bytes ;
125
123
_packed += do_now_bytes ;
0 commit comments