Merge pull request #160 from redboltz/fix_memory_allocation

Fixed memory size caluclation problem.
This commit is contained in:
Nobuyuki Kubota 2014-11-15 17:12:23 -08:00
commit 3d20ec6f21
10 changed files with 70 additions and 13 deletions

View File

@ -226,7 +226,12 @@ inline void* zone::allocate_expand(size_t size)
size_t sz = m_chunk_size;
while(sz < size) {
sz *= 2;
size_t tmp_sz = sz * 2;
if (tmp_sz <= sz) {
sz = size;
break;
}
sz = tmp_sz;
}
chunk* c = static_cast<chunk*>(::malloc(sizeof(chunk) + sz));

View File

@ -271,7 +271,12 @@ inline void* zone::allocate_expand(size_t size)
size_t sz = m_chunk_size;
while(sz < size) {
sz *= 2;
size_t tmp_sz = sz * 2;
if (tmp_sz <= sz) {
sz = size;
break;
}
sz = tmp_sz;
}
chunk* c = static_cast<chunk*>(::malloc(sizeof(chunk) + sz));

View File

@ -269,7 +269,12 @@ inline void* zone::allocate_expand(size_t size)
size_t sz = m_chunk_size;
while(sz < size) {
sz *= 2;
size_t tmp_sz = sz * 2;
if (tmp_sz <= sz) {
sz = size;
break;
}
sz = tmp_sz;
}
chunk* c = static_cast<chunk*>(::malloc(sizeof(chunk) + sz));

View File

@ -73,7 +73,14 @@ static inline int msgpack_sbuffer_write(void* data, const char* buf, size_t len)
size_t nsize = (sbuf->alloc) ?
sbuf->alloc * 2 : MSGPACK_SBUFFER_INIT_SIZE;
while(nsize < sbuf->size + len) { nsize *= 2; }
while(nsize < sbuf->size + len) {
size_t tmp_nsize = nsize * 2;
if (tmp_nsize <= nsize) {
nsize = sbuf->size + len;
break;
}
nsize = tmp_nsize;
}
tmp = realloc(sbuf->data, nsize);
if(!tmp) { return -1; }
@ -109,4 +116,3 @@ static inline void msgpack_sbuffer_clear(msgpack_sbuffer* sbuf)
#endif
#endif /* msgpack/sbuffer.h */

View File

@ -94,7 +94,14 @@ private:
size_t nsize = (m_alloc > 0) ?
m_alloc * 2 : MSGPACK_SBUFFER_INIT_SIZE;
while(nsize < m_size + len) { nsize *= 2; }
while(nsize < m_size + len) {
size_t tmp_nsize = nsize * 2;
if (tmp_nsize <= nsize) {
nsize = m_size + len;
break;
}
nsize = tmp_nsize;
}
void* tmp = ::realloc(m_data, nsize);
if(!tmp) {

View File

@ -1101,7 +1101,12 @@ inline void unpacker::expand_buffer(std::size_t size)
if(m_off == COUNTER_SIZE) {
std::size_t next_size = (m_used + m_free) * 2; // include COUNTER_SIZE
while(next_size < size + m_used) {
next_size *= 2;
std::size_t tmp_next_size = next_size * 2;
if (tmp_next_size <= next_size) {
next_size = size + m_used;
break;
}
next_size = tmp_next_size;
}
char* tmp = static_cast<char*>(::realloc(m_buffer, next_size));

View File

@ -202,7 +202,12 @@ public:
const size_t reqsize = nused + tosize;
size_t nnext = (to->m_end - to->m_array) * 2;
while(nnext < reqsize) {
nnext *= 2;
size_t tmp_nnext = nnext * 2;
if (tmp_nnext <= nnext) {
nnext = reqsize;
break;
}
nnext = tmp_nnext;
}
iovec* nvec = static_cast<iovec*>(::realloc(

View File

@ -396,7 +396,12 @@ bool msgpack_unpacker_expand_buffer(msgpack_unpacker* mpac, size_t size)
if(mpac->off == COUNTER_SIZE) {
size_t next_size = (mpac->used + mpac->free) * 2; // include COUNTER_SIZE
while(next_size < size + mpac->used) {
next_size *= 2;
size_t tmp_next_size = next_size * 2;
if (tmp_next_size <= next_size) {
next_size = size + mpac->used;
break;
}
next_size = tmp_next_size;
}
char* tmp = (char*)realloc(mpac->buffer, next_size);
@ -411,7 +416,12 @@ bool msgpack_unpacker_expand_buffer(msgpack_unpacker* mpac, size_t size)
size_t next_size = mpac->initial_buffer_size; // include COUNTER_SIZE
size_t not_parsed = mpac->used - mpac->off;
while(next_size < size + not_parsed + COUNTER_SIZE) {
next_size *= 2;
size_t tmp_next_size = next_size * 2;
if (tmp_next_size <= next_size) {
next_size = size + not_parsed + COUNTER_SIZE;
break;
}
next_size = tmp_next_size;
}
char* tmp = (char*)malloc(next_size);

View File

@ -179,7 +179,12 @@ int msgpack_vrefbuffer_migrate(msgpack_vrefbuffer* vbuf, msgpack_vrefbuffer* to)
const size_t reqsize = nused + tosize;
size_t nnext = (size_t)(to->end - to->array) * 2;
while(nnext < reqsize) {
nnext *= 2;
size_t tmp_nnext = nnext * 2;
if (tmp_nnext <= nnext) {
nnext = reqsize;
break;
}
nnext = tmp_nnext;
}
struct iovec* nvec = (struct iovec*)realloc(

View File

@ -79,7 +79,12 @@ void* msgpack_zone_malloc_expand(msgpack_zone* zone, size_t size)
size_t sz = zone->chunk_size;
while(sz < size) {
sz *= 2;
size_t tmp_sz = sz * 2;
if (tmp_sz <= sz) {
tmp_sz = size;
break;
}
sz = tmp_sz;
}
msgpack_zone_chunk* chunk = (msgpack_zone_chunk*)malloc(
@ -218,4 +223,3 @@ void msgpack_zone_free(msgpack_zone* zone)
msgpack_zone_destroy(zone);
free(zone);
}