Move check for GC to xmalloc and xcalloc
Moves the check earlier to before we actually perform the allocation.
This commit is contained in:
parent
9da5a7e79d
commit
965f4259db
21
gc.c
21
gc.c
@ -12217,13 +12217,6 @@ malloc_during_gc_p(rb_objspace_t *objspace)
|
|||||||
static inline void *
|
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)
|
||||||
{
|
{
|
||||||
if (UNLIKELY(malloc_during_gc_p(objspace))) {
|
|
||||||
rb_warn("malloc during GC detected, this could cause crashes if it triggers another GC");
|
|
||||||
#if RGENGC_CHECK_MODE
|
|
||||||
rb_bug("Cannot malloc during GC");
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
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);
|
||||||
|
|
||||||
@ -12285,6 +12278,13 @@ objspace_malloc_fixup(rb_objspace_t *objspace, void *mem, size_t size)
|
|||||||
static void *
|
static void *
|
||||||
objspace_xmalloc0(rb_objspace_t *objspace, size_t size)
|
objspace_xmalloc0(rb_objspace_t *objspace, size_t size)
|
||||||
{
|
{
|
||||||
|
if (UNLIKELY(malloc_during_gc_p(objspace))) {
|
||||||
|
rb_warn("malloc during GC detected, this could cause crashes if it triggers another GC");
|
||||||
|
#if RGENGC_CHECK_MODE
|
||||||
|
rb_bug("Cannot malloc during GC");
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
void *mem;
|
void *mem;
|
||||||
|
|
||||||
size = objspace_malloc_prepare(objspace, size);
|
size = objspace_malloc_prepare(objspace, size);
|
||||||
@ -12546,6 +12546,13 @@ ruby_xmalloc2_body(size_t n, size_t size)
|
|||||||
static void *
|
static void *
|
||||||
objspace_xcalloc(rb_objspace_t *objspace, size_t size)
|
objspace_xcalloc(rb_objspace_t *objspace, size_t size)
|
||||||
{
|
{
|
||||||
|
if (UNLIKELY(malloc_during_gc_p(objspace))) {
|
||||||
|
rb_warn("calloc during GC detected, this could cause crashes if it triggers another GC");
|
||||||
|
#if RGENGC_CHECK_MODE
|
||||||
|
rb_bug("Cannot calloc during GC");
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
void *mem;
|
void *mem;
|
||||||
|
|
||||||
size = objspace_malloc_prepare(objspace, size);
|
size = objspace_malloc_prepare(objspace, size);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user