Skip to content

Commit 6004983

Browse files
committed
[mono][interp] Free headers allocated for inlined methods
We add them to a list for later freeing. This uses the same pattern as jit.
1 parent d4c23e8 commit 6004983

File tree

2 files changed

+6
-0
lines changed

2 files changed

+6
-0
lines changed

src/mono/mono/mini/interp/transform.c

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3310,6 +3310,8 @@ interp_inline_newobj (TransformData *td, MonoMethod *target_method, MonoMethodSi
33103310
goto fail;
33113311
td->ip += 5;
33123312

3313+
td->headers_to_free = g_slist_prepend_mempool (td->mempool, td->headers_to_free, mheader);
3314+
33133315
push_var (td, dreg);
33143316
return TRUE;
33153317
fail:
@@ -3911,6 +3913,7 @@ interp_transform_call (TransformData *td, MonoMethod *method, MonoMethod *target
39113913
return_val_if_nok (error, FALSE);
39123914

39133915
if (interp_inline_method (td, target_method, mheader, error)) {
3916+
td->headers_to_free = g_slist_prepend_mempool (td->mempool, td->headers_to_free, mheader);
39143917
td->ip += 5;
39153918
goto done;
39163919
}
@@ -9935,6 +9938,8 @@ generate (MonoMethod *method, MonoMethodHeader *header, InterpMethod *rtm, MonoG
99359938
if (td->line_numbers)
99369939
g_array_free (td->line_numbers, TRUE);
99379940
g_slist_free (td->imethod_items);
9941+
for (GSList *l = td->headers_to_free; l; l = l->next)
9942+
mono_metadata_free_mh ((MonoMethodHeader *)l->data);
99389943
mono_mempool_destroy (td->mempool);
99399944
mono_interp_pgo_generate_end ();
99409945
if (td->retry_compilation) {

src/mono/mono/mini/interp/transform.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -316,6 +316,7 @@ typedef struct
316316
// FIXME: ptr_u32
317317
dn_simdhash_ptr_ptr_t *data_hash;
318318
GSList *imethod_items;
319+
GSList *headers_to_free;
319320
#ifdef ENABLE_EXPERIMENT_TIERED
320321
// FIXME: ptr_u32
321322
dn_simdhash_ptr_ptr_t *patchsite_hash;

0 commit comments

Comments
 (0)