Fix ruby_mimcalloc size when CALC_EXACT_MALLOC_SIZE
Should be `sizeof(struct malloc_obj_info) + (num * element)`, not `num * (sizeof(struct malloc_obj_info) + element)`.
This commit is contained in:
parent
77f5301cd1
commit
e9e41ad6b0
14
gc.c
14
gc.c
@ -11861,7 +11861,7 @@ static inline void *
|
|||||||
objspace_malloc_fixup(rb_objspace_t *objspace, void *mem, size_t size)
|
objspace_malloc_fixup(rb_objspace_t *objspace, void *mem, size_t size)
|
||||||
{
|
{
|
||||||
size = objspace_malloc_size(objspace, mem, size);
|
size = objspace_malloc_size(objspace, mem, size);
|
||||||
objspace_malloc_increase(objspace, mem, size, 0, MEMOP_TYPE_MALLOC);
|
objspace_malloc_increase(objspace, mem, size, 0, MEMOP_TYPE_MALLOC) {}
|
||||||
|
|
||||||
#if CALC_EXACT_MALLOC_SIZE
|
#if CALC_EXACT_MALLOC_SIZE
|
||||||
{
|
{
|
||||||
@ -12340,10 +12340,12 @@ ruby_mimcalloc(size_t num, size_t size)
|
|||||||
{
|
{
|
||||||
void *mem;
|
void *mem;
|
||||||
#if CALC_EXACT_MALLOC_SIZE
|
#if CALC_EXACT_MALLOC_SIZE
|
||||||
size += sizeof(struct malloc_obj_info);
|
struct rbimpl_size_mul_overflow_tag t = rbimpl_size_mul_overflow(num, size);
|
||||||
#endif
|
if (UNLIKELY(t.left)) {
|
||||||
mem = calloc(num, size);
|
return NULL;
|
||||||
#if CALC_EXACT_MALLOC_SIZE
|
}
|
||||||
|
size = t.right + sizeof(struct malloc_obj_info);
|
||||||
|
mem = calloc1(size);
|
||||||
if (!mem) {
|
if (!mem) {
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
@ -12359,6 +12361,8 @@ ruby_mimcalloc(size_t num, size_t size)
|
|||||||
#endif
|
#endif
|
||||||
mem = info + 1;
|
mem = info + 1;
|
||||||
}
|
}
|
||||||
|
#else
|
||||||
|
mem = calloc(num, size);
|
||||||
#endif
|
#endif
|
||||||
return mem;
|
return mem;
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user