From 3eb037cbb5f5593a26b36bfd3913963cb3c0c3e9 Mon Sep 17 00:00:00 2001 From: Kevin Harwell <kharwell@digium.com> Date: Fri, 30 Aug 2013 16:20:21 +0000 Subject: [PATCH] Fix memory leaks (closes issue ASTERISK-22368) Reported by: Corey Farrell Patches: issueA22368_mixmonitor_free_filename.patch uploaded by wdoekes (license 5674) ........ Merged revisions 398004 from http://svn.asterisk.org/svn/asterisk/branches/10 git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/11@398011 65c4cc65-6c06-0410-ace0-fbb531ad65f3 --- apps/app_mixmonitor.c | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/apps/app_mixmonitor.c b/apps/app_mixmonitor.c index 949cd1ce2d..80c32565a7 100644 --- a/apps/app_mixmonitor.c +++ b/apps/app_mixmonitor.c @@ -142,7 +142,7 @@ ASTERISK_FILE_VERSION(__FILE__, "$Revision$") <variable name="MIXMONITOR_FILENAME"> <para>Will contain the filename used to record.</para> </variable> - </variablelist> + </variablelist> </description> <see-also> <ref type="application">Monitor</ref> @@ -409,7 +409,7 @@ static void destroy_monitor_audiohook(struct mixmonitor *mixmonitor) ast_audiohook_destroy(&mixmonitor->audiohook); } -static int startmon(struct ast_channel *chan, struct ast_audiohook *audiohook) +static int startmon(struct ast_channel *chan, struct ast_audiohook *audiohook) { struct ast_channel *peer = NULL; int res = 0; @@ -420,7 +420,7 @@ static int startmon(struct ast_channel *chan, struct ast_audiohook *audiohook) ast_audiohook_attach(chan, audiohook); if (!res && ast_test_flag(ast_channel_flags(chan), AST_FLAG_NBRIDGE) && (peer = ast_bridged_channel(chan))) - ast_softhangup(peer, AST_SOFTHANGUP_UNBRIDGE); + ast_softhangup(peer, AST_SOFTHANGUP_UNBRIDGE); return res; } @@ -497,13 +497,15 @@ static void mixmonitor_free(struct mixmonitor *mixmonitor) if (mixmonitor->mixmonitor_ds) { ast_mutex_destroy(&mixmonitor->mixmonitor_ds->lock); ast_cond_destroy(&mixmonitor->mixmonitor_ds->destruction_condition); - ast_free(mixmonitor->filename_write); - ast_free(mixmonitor->filename_read); ast_free(mixmonitor->mixmonitor_ds); - ast_free(mixmonitor->name); - ast_free(mixmonitor->post_process); } + ast_free(mixmonitor->name); + ast_free(mixmonitor->post_process); + ast_free(mixmonitor->filename); + ast_free(mixmonitor->filename_write); + ast_free(mixmonitor->filename_read); + /* Free everything in the recipient list */ clear_mixmonitor_recipient_list(mixmonitor); @@ -513,6 +515,7 @@ static void mixmonitor_free(struct mixmonitor *mixmonitor) if (mixmonitor->callid) { ast_callid_unref(mixmonitor->callid); } + ast_free(mixmonitor); } } @@ -587,7 +590,7 @@ static void mixmonitor_save_prep(struct mixmonitor *mixmonitor, char *filename, } } -static void *mixmonitor_thread(void *obj) +static void *mixmonitor_thread(void *obj) { struct mixmonitor *mixmonitor = obj; char *fs_ext = ""; @@ -1363,7 +1366,6 @@ static int unload_module(void) res |= ast_manager_unregister("MixMonitorMute"); res |= ast_manager_unregister("MixMonitor"); res |= ast_manager_unregister("StopMixMonitor"); - return res; } -- GitLab