Free everything at shutdown

when the RUBY_FREE_ON_SHUTDOWN environment variable is set, manually free memory at shutdown.

Co-authored-by: Nobuyoshi Nakada <nobu@ruby-lang.org>
Co-authored-by: Peter Zhu <peter@peterzhu.ca>
This commit is contained in:
Adam Hess 2023-10-12 11:15:53 -07:00 committed by Peter Zhu
parent b361a800c2
commit 6816e8efcf
27 changed files with 285 additions and 6 deletions

View file

@ -71,6 +71,24 @@ static struct enc_table {
st_table *names;
} global_enc_table;
static int
enc_names_free_i(st_data_t name, st_data_t idx, st_data_t args)
{
ruby_xfree((void *)name);
return ST_DELETE;
}
void
rb_free_global_enc_table(void)
{
for (size_t i = 0; i < ENCODING_LIST_CAPA; i++) {
xfree((void *)global_enc_table.list[i].enc);
}
st_foreach(global_enc_table.names, enc_names_free_i, (st_data_t)0);
st_free_table(global_enc_table.names);
}
static rb_encoding *global_enc_ascii,
*global_enc_utf_8,
*global_enc_us_ascii;