diff options
author | Adam Hess <adamhess1991@gmail.com> | 2023-10-12 11:15:53 -0700 |
---|---|---|
committer | Peter Zhu <peter@peterzhu.ca> | 2023-12-07 15:52:35 -0500 |
commit | 6816e8efcff3be75f8020cd1b0ea57d3cd664bbc (patch) | |
tree | 8f8484b955ba25e9df6a2038db0f156e7cbf71e4 /encoding.c | |
parent | b361a800c22e0248bf126d77e96a7bd4f9c34d1b (diff) | |
download | ruby-6816e8efcff3be75f8020cd1b0ea57d3cd664bbc.tar.gz |
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>
Diffstat (limited to 'encoding.c')
-rw-r--r-- | encoding.c | 18 |
1 files changed, 18 insertions, 0 deletions
diff --git a/encoding.c b/encoding.c index 8bfab73177..1ede6a677c 100644 --- a/encoding.c +++ b/encoding.c @@ -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; |