diff options
author | Kevin Harwell <kharwell@digium.com> | 2013-08-30 19:22:59 +0000 |
---|---|---|
committer | Kevin Harwell <kharwell@digium.com> | 2013-08-30 19:22:59 +0000 |
commit | 16b8d0cb5a3b15eae8db19c99223170ebed79fef (patch) | |
tree | b9bce6e9b0540017239a82633619ba4b60c441a7 /main | |
parent | dbbb674be0c3e7fe63dd8f76405a961812dbe6c5 (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')
-rw-r--r-- | main/config.c | 4 | ||||
-rw-r--r-- | main/indications.c | 3 | ||||
-rw-r--r-- | main/named_acl.c | 2 | ||||
-rw-r--r-- | main/translate.c | 16 |
4 files changed, 25 insertions, 0 deletions
diff --git a/main/config.c b/main/config.c index 5220679a2..112623104 100644 --- a/main/config.c +++ b/main/config.c @@ -3248,6 +3248,10 @@ static void config_shutdown(void) AST_LIST_LOCK(&cfmtime_head); while ((cfmtime = AST_LIST_REMOVE_HEAD(&cfmtime_head, list))) { + struct cache_file_include *cfinclude; + while ((cfinclude = AST_LIST_REMOVE_HEAD(&cfmtime->includes, list))) { + ast_free(cfinclude); + } ast_free(cfmtime); } AST_LIST_UNLOCK(&cfmtime_head); diff --git a/main/indications.c b/main/indications.c index 39c9c6e7b..8d644e53e 100644 --- a/main/indications.c +++ b/main/indications.c @@ -499,6 +499,9 @@ struct ast_tone_zone_sound *ast_get_indication_tone(const struct ast_tone_zone * ast_tone_zone_unlock(zone); + if (!_zone) + zone = ast_tone_zone_unref(zone); + return ts; } diff --git a/main/named_acl.c b/main/named_acl.c index a93f78954..f0b5c2894 100644 --- a/main/named_acl.c +++ b/main/named_acl.c @@ -567,6 +567,8 @@ static struct ast_cli_entry cli_named_acl[] = { static void named_acl_cleanup(void) { + ast_cli_unregister_multiple(cli_named_acl, ARRAY_LEN(cli_named_acl)); + STASIS_MESSAGE_TYPE_CLEANUP(ast_named_acl_change_type); aco_info_destroy(&cfg_info); ao2_global_obj_release(globals); 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; } |