1
1

Something not quite right about the revised allocation algos, so revert them while retaining the larger initial and threshold sizes

Signed-off-by: Ralph Castain <rhc@open-mpi.org>
Этот коммит содержится в:
Ralph Castain 2017-01-21 14:37:45 -08:00
родитель be3ef77739
Коммит e8e5f81abd

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

@ -36,7 +36,6 @@ char* opal_dss_buffer_extend(opal_buffer_t *buffer, size_t bytes_to_add)
{
size_t required, to_alloc;
size_t pack_offset, unpack_offset;
char *tmp;
/* Check to see if we have enough space already */
@ -45,19 +44,34 @@ char* opal_dss_buffer_extend(opal_buffer_t *buffer, size_t bytes_to_add)
}
required = buffer->bytes_used + bytes_to_add;
if (required >= (size_t)opal_dss_threshold_size) {
to_alloc = (required + opal_dss_threshold_size - 1) & ~(opal_dss_threshold_size - 1);
if(required >= (size_t)opal_dss_threshold_size) {
to_alloc = ((required + opal_dss_threshold_size - 1)
/ opal_dss_threshold_size) * opal_dss_threshold_size;
} else {
to_alloc = buffer->bytes_allocated ? buffer->bytes_allocated : (size_t)opal_dss_initial_size;
to_alloc = buffer->bytes_allocated;
if(0 == to_alloc) {
to_alloc = opal_dss_initial_size;
}
while(to_alloc < required) {
to_alloc <<= 1;
}
}
if (NULL != buffer->base_ptr) {
pack_offset = ((char*) buffer->pack_ptr) - ((char*) buffer->base_ptr);
unpack_offset = ((char*) buffer->unpack_ptr) - ((char*) buffer->base_ptr);
tmp = (char*)realloc(buffer->base_ptr, to_alloc);
if (NULL == tmp) {
unpack_offset = ((char*) buffer->unpack_ptr) -
((char*) buffer->base_ptr);
buffer->base_ptr = (char*)realloc(buffer->base_ptr, to_alloc);
} else {
pack_offset = 0;
unpack_offset = 0;
buffer->bytes_used = 0;
buffer->base_ptr = (char*)malloc(to_alloc);
}
if (NULL == buffer->base_ptr) {
return NULL;
}
buffer->base_ptr = tmp;
buffer->pack_ptr = ((char*) buffer->base_ptr) + pack_offset;
buffer->unpack_ptr = ((char*) buffer->base_ptr) + unpack_offset;
buffer->bytes_allocated = to_alloc;