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>
Этот коммит содержится в:
родитель
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;
|
||||
|
Загрузка…
x
Ссылка в новой задаче
Block a user