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 required, to_alloc;
|
||||||
size_t pack_offset, unpack_offset;
|
size_t pack_offset, unpack_offset;
|
||||||
char *tmp;
|
|
||||||
|
|
||||||
/* Check to see if we have enough space already */
|
/* 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;
|
required = buffer->bytes_used + bytes_to_add;
|
||||||
if (required >= (size_t)opal_dss_threshold_size) {
|
if(required >= (size_t)opal_dss_threshold_size) {
|
||||||
to_alloc = (required + opal_dss_threshold_size - 1) & ~(opal_dss_threshold_size - 1);
|
to_alloc = ((required + opal_dss_threshold_size - 1)
|
||||||
|
/ opal_dss_threshold_size) * opal_dss_threshold_size;
|
||||||
} else {
|
} 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;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pack_offset = ((char*) buffer->pack_ptr) - ((char*) buffer->base_ptr);
|
if (NULL != buffer->base_ptr) {
|
||||||
unpack_offset = ((char*) buffer->unpack_ptr) - ((char*) buffer->base_ptr);
|
pack_offset = ((char*) buffer->pack_ptr) - ((char*) buffer->base_ptr);
|
||||||
tmp = (char*)realloc(buffer->base_ptr, to_alloc);
|
unpack_offset = ((char*) buffer->unpack_ptr) -
|
||||||
if (NULL == tmp) {
|
((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;
|
return NULL;
|
||||||
}
|
}
|
||||||
buffer->base_ptr = tmp;
|
|
||||||
buffer->pack_ptr = ((char*) buffer->base_ptr) + pack_offset;
|
buffer->pack_ptr = ((char*) buffer->base_ptr) + pack_offset;
|
||||||
buffer->unpack_ptr = ((char*) buffer->base_ptr) + unpack_offset;
|
buffer->unpack_ptr = ((char*) buffer->base_ptr) + unpack_offset;
|
||||||
buffer->bytes_allocated = to_alloc;
|
buffer->bytes_allocated = to_alloc;
|
||||||
|
Загрузка…
x
Ссылка в новой задаче
Block a user