Skip to content

Commit

Permalink
Fix leaking special return data if istype handler throws
Browse files Browse the repository at this point in the history
  • Loading branch information
niner committed Jan 8, 2021
1 parent 221339f commit 10d30a7
Showing 1 changed file with 5 additions and 1 deletion.
6 changes: 5 additions & 1 deletion src/6model/6model.c
Expand Up @@ -332,6 +332,10 @@ static void mark_sr_data(MVMThreadContext *tc, MVMFrame *frame, MVMGCWorklist *w
MVM_gc_worklist_add(tc, worklist, &atd->type);
}

static void free_sr_data(MVMThreadContext *tc, void *sr_data) {
MVM_free(free_sr_data);
}

void MVM_6model_istype(MVMThreadContext *tc, MVMObject *obj, MVMObject *type, MVMRegister *res) {
MVMObject **cache;
MVMSTable *st;
Expand Down Expand Up @@ -390,7 +394,7 @@ void MVM_6model_istype(MVMThreadContext *tc, MVMObject *obj, MVMObject *type, MV
atd->obj = obj;
atd->type = type;
atd->res = res;
MVM_frame_special_return(tc, tc->cur_frame, accepts_type_sr, NULL,
MVM_frame_special_return(tc, tc->cur_frame, accepts_type_sr, free_sr_data,
atd, mark_sr_data);
}
STABLE(code)->invoke(tc, code, typecheck_callsite, tc->cur_frame->args);
Expand Down

0 comments on commit 10d30a7

Please sign in to comment.