mirror of
https://github.com/msgpack/msgpack-c.git
synced 2025-04-24 00:57:07 +02:00
Merge pull request #160 from redboltz/fix_memory_allocation
Fixed memory size caluclation problem.
This commit is contained in:
commit
3d20ec6f21
@ -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));
|
||||
|
@ -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));
|
||||
|
@ -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));
|
||||
|
@ -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 */
|
||||
|
||||
|
@ -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) {
|
||||
|
@ -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));
|
||||
|
@ -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(
|
||||
|
14
src/unpack.c
14
src/unpack.c
@ -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);
|
||||
|
@ -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(
|
||||
|
@ -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);
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user