summaryrefslogtreecommitdiff
path: root/main/translate.c
diff options
context:
space:
mode:
authorKevin Harwell <kharwell@digium.com>2013-08-30 19:22:59 +0000
committerKevin Harwell <kharwell@digium.com>2013-08-30 19:22:59 +0000
commit16b8d0cb5a3b15eae8db19c99223170ebed79fef (patch)
treeb9bce6e9b0540017239a82633619ba4b60c441a7 /main/translate.c
parentdbbb674be0c3e7fe63dd8f76405a961812dbe6c5 (diff)
Fix various memory leaks
main/config.c - cleanup cache fie includes res/res_security_log.c - unregister logger level channesl/chan_sip.c - cleanup io context and notify_types main/translator.c - cleanup at shutdown main/named_acl.c - cleanup cli commands main/indications.c - ast_get_indication_tone() unref default_tone_zone if used (closes issues ASTERISK-22378) Reported by: Corey Farrell Patches: config_shutdown.patch uploaded by coreyfarrell (license 5909) res_security_log.patch uploaded by coreyfarrell (license 5909) chan_sip-11.patch uploaded by coreyfarrell (license 5909) indications_refleak.patch uploaded by coreyfarrell (license 5909) named_acl-cli_unreg-trunk.patch uploaded by coreyfarrell (license 5909) translate_shutdown.patch uploaded by coreyfarrell (license 5909) ........ Merged revisions 398102 from http://svn.asterisk.org/svn/asterisk/branches/1.8 ........ Merged revisions 398103 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 398116 from http://svn.asterisk.org/svn/asterisk/branches/12 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@398124 65c4cc65-6c06-0410-ace0-fbb531ad65f3
Diffstat (limited to 'main/translate.c')
-rw-r--r--main/translate.c16
1 files changed, 16 insertions, 0 deletions
diff --git a/main/translate.c b/main/translate.c
index ce430ce97..a258599d2 100644
--- a/main/translate.c
+++ b/main/translate.c
@@ -1396,11 +1396,27 @@ void ast_translate_available_formats(struct ast_format_cap *dest, struct ast_for
ast_format_cap_iter_end(src);
}
+static void translate_shutdown(void)
+{
+ int x;
+ ast_cli_unregister_multiple(cli_translate, ARRAY_LEN(cli_translate));
+
+ ast_rwlock_wrlock(&tablelock);
+ for (x = 0; x < index_size; x++) {
+ ast_free(__matrix[x]);
+ }
+ ast_free(__matrix);
+ ast_free(__indextable);
+ ast_rwlock_unlock(&tablelock);
+ ast_rwlock_destroy(&tablelock);
+}
+
int ast_translate_init(void)
{
int res = 0;
ast_rwlock_init(&tablelock);
res = matrix_resize(1);
res |= ast_cli_register_multiple(cli_translate, ARRAY_LEN(cli_translate));
+ ast_register_atexit(translate_shutdown);
return res;
}