зеркало из https://github.com/github/ruby.git
Ensure the VM is alive before accessing objspace in C API (Feature #19627)
[Feature #19627]
This commit is contained in:
Родитель
e135a21a85
Коммит
2f9f44f077
12
gc.c
12
gc.c
|
@ -1007,6 +1007,11 @@ asan_unlock_freelist(struct heap_page *page)
|
||||||
/* Aliases */
|
/* Aliases */
|
||||||
#define rb_objspace (*rb_objspace_of(GET_VM()))
|
#define rb_objspace (*rb_objspace_of(GET_VM()))
|
||||||
#define rb_objspace_of(vm) ((vm)->objspace)
|
#define rb_objspace_of(vm) ((vm)->objspace)
|
||||||
|
#define unless_objspace(objspace) \
|
||||||
|
rb_objspace_t *objspace; \
|
||||||
|
rb_vm_t *unless_objspace_vm = GET_VM(); \
|
||||||
|
if (unless_objspace_vm) objspace = unless_objspace_vm->objspace; \
|
||||||
|
else /* return; or objspace will be warned uninitialized */
|
||||||
|
|
||||||
#define ruby_initial_gc_stress gc_params.gc_stress
|
#define ruby_initial_gc_stress gc_params.gc_stress
|
||||||
|
|
||||||
|
@ -10914,7 +10919,7 @@ rb_gc_start(void)
|
||||||
void
|
void
|
||||||
rb_gc(void)
|
rb_gc(void)
|
||||||
{
|
{
|
||||||
rb_objspace_t *objspace = &rb_objspace;
|
unless_objspace(objspace) { return; }
|
||||||
unsigned int reason = GPR_DEFAULT_REASON;
|
unsigned int reason = GPR_DEFAULT_REASON;
|
||||||
garbage_collect(objspace, reason);
|
garbage_collect(objspace, reason);
|
||||||
}
|
}
|
||||||
|
@ -10922,7 +10927,7 @@ rb_gc(void)
|
||||||
int
|
int
|
||||||
rb_during_gc(void)
|
rb_during_gc(void)
|
||||||
{
|
{
|
||||||
rb_objspace_t *objspace = &rb_objspace;
|
unless_objspace(objspace) { return FALSE; }
|
||||||
return during_gc;
|
return during_gc;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -12740,7 +12745,8 @@ gc_malloc_allocations(VALUE self)
|
||||||
void
|
void
|
||||||
rb_gc_adjust_memory_usage(ssize_t diff)
|
rb_gc_adjust_memory_usage(ssize_t diff)
|
||||||
{
|
{
|
||||||
rb_objspace_t *objspace = &rb_objspace;
|
unless_objspace(objspace) { return; }
|
||||||
|
|
||||||
if (diff > 0) {
|
if (diff > 0) {
|
||||||
objspace_malloc_increase(objspace, 0, diff, 0, MEMOP_TYPE_REALLOC);
|
objspace_malloc_increase(objspace, 0, diff, 0, MEMOP_TYPE_REALLOC);
|
||||||
}
|
}
|
||||||
|
|
Загрузка…
Ссылка в новой задаче