From 6816e8efcff3be75f8020cd1b0ea57d3cd664bbc Mon Sep 17 00:00:00 2001 From: Adam Hess Date: Thu, 12 Oct 2023 11:15:53 -0700 Subject: Free everything at shutdown when the RUBY_FREE_ON_SHUTDOWN environment variable is set, manually free memory at shutdown. Co-authored-by: Nobuyoshi Nakada Co-authored-by: Peter Zhu --- transcode.c | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) (limited to 'transcode.c') diff --git a/transcode.c b/transcode.c index 090680f4a0..892814ee3b 100644 --- a/transcode.c +++ b/transcode.c @@ -181,6 +181,28 @@ typedef struct { static st_table *transcoder_table; +static int +free_inner_transcode_i(st_data_t key, st_data_t val, st_data_t arg) +{ + xfree((void *)val); + return ST_DELETE; +} + +static int +free_transcode_i(st_data_t key, st_data_t val, st_data_t arg) +{ + st_foreach((void *)val, free_inner_transcode_i, 0); + st_free_table((void *)val); + return ST_DELETE; +} + +void +rb_free_transcoder_table(void) +{ + st_foreach(transcoder_table, free_transcode_i, 0); + st_free_table(transcoder_table); +} + static transcoder_entry_t * make_transcoder_entry(const char *sname, const char *dname) { -- cgit v1.2.3