Fix crash when RGENGC_CHECK_MODE=2
Commit dba61f4 fixes a crash when GC'ing a iseq that failed to compile. However, if we turn on RGENGC_CHECK_MODE then rb_iseq_memsize crashes since it cannot handle an iseq without is_entries.
This commit is contained in:
parent
e58c4f97fa
commit
d90835aeb5
18
iseq.c
18
iseq.c
@ -515,15 +515,17 @@ rb_iseq_memsize(const rb_iseq_t *iseq)
|
||||
/* body->is_entries */
|
||||
size += ISEQ_IS_SIZE(body) * sizeof(union iseq_inline_storage_entry);
|
||||
|
||||
/* IC entries constant segments */
|
||||
for (unsigned int ic_idx = 0; ic_idx < body->ic_size; ic_idx++) {
|
||||
IC ic = &ISEQ_IS_IC_ENTRY(body, ic_idx);
|
||||
const ID *ids = ic->segments;
|
||||
if (!ids) continue;
|
||||
while (*ids++) {
|
||||
size += sizeof(ID);
|
||||
if (ISEQ_BODY(iseq)->is_entries) {
|
||||
/* IC entries constant segments */
|
||||
for (unsigned int ic_idx = 0; ic_idx < body->ic_size; ic_idx++) {
|
||||
IC ic = &ISEQ_IS_IC_ENTRY(body, ic_idx);
|
||||
const ID *ids = ic->segments;
|
||||
if (!ids) continue;
|
||||
while (*ids++) {
|
||||
size += sizeof(ID);
|
||||
}
|
||||
size += sizeof(ID); // null terminator
|
||||
}
|
||||
size += sizeof(ID); // null terminator
|
||||
}
|
||||
|
||||
/* body->call_data */
|
||||
|
Loading…
x
Reference in New Issue
Block a user