Marshal is calling functions that should pin things
This commit is contained in:
parent
6e0b40af3d
commit
aec16b7540
14
gc.c
14
gc.c
@ -4710,7 +4710,7 @@ static int
|
|||||||
mark_key(st_data_t key, st_data_t value, st_data_t data)
|
mark_key(st_data_t key, st_data_t value, st_data_t data)
|
||||||
{
|
{
|
||||||
rb_objspace_t *objspace = (rb_objspace_t *)data;
|
rb_objspace_t *objspace = (rb_objspace_t *)data;
|
||||||
gc_mark(objspace, (VALUE)key);
|
gc_mark_and_pin(objspace, (VALUE)key);
|
||||||
return ST_CONTINUE;
|
return ST_CONTINUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -4744,6 +4744,16 @@ mark_keyvalue(st_data_t key, st_data_t value, st_data_t data)
|
|||||||
return ST_CONTINUE;
|
return ST_CONTINUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int
|
||||||
|
pin_key_pin_value(st_data_t key, st_data_t value, st_data_t data)
|
||||||
|
{
|
||||||
|
rb_objspace_t *objspace = (rb_objspace_t *)data;
|
||||||
|
|
||||||
|
gc_mark_and_pin(objspace, (VALUE)key);
|
||||||
|
gc_mark_and_pin(objspace, (VALUE)value);
|
||||||
|
return ST_CONTINUE;
|
||||||
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
pin_key_mark_value(st_data_t key, st_data_t value, st_data_t data)
|
pin_key_mark_value(st_data_t key, st_data_t value, st_data_t data)
|
||||||
{
|
{
|
||||||
@ -4779,7 +4789,7 @@ static void
|
|||||||
mark_st(rb_objspace_t *objspace, st_table *tbl)
|
mark_st(rb_objspace_t *objspace, st_table *tbl)
|
||||||
{
|
{
|
||||||
if (!tbl) return;
|
if (!tbl) return;
|
||||||
st_foreach(tbl, mark_keyvalue, (st_data_t)objspace);
|
st_foreach(tbl, pin_key_pin_value, (st_data_t)objspace);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
Loading…
x
Reference in New Issue
Block a user