[asterisk-commits] rmudgett: branch 13 r422037 - /branches/13/res/res_musiconhold.c

SVN commits to the Asterisk project asterisk-commits at lists.digium.com
Mon Aug 25 11:44:39 CDT 2014


Author: rmudgett
Date: Mon Aug 25 11:44:37 2014
New Revision: 422037

URL: http://svnview.digium.com/svn/asterisk?view=rev&rev=422037
Log:
res_musiconhold.c: Release any format refs before memset().

* Clear the channel music_state pointer before destroying the music_state
object for safety.

Modified:
    branches/13/res/res_musiconhold.c

Modified: branches/13/res/res_musiconhold.c
URL: http://svnview.digium.com/svn/asterisk/branches/13/res/res_musiconhold.c?view=diff&rev=422037&r1=422036&r2=422037
==============================================================================
--- branches/13/res/res_musiconhold.c (original)
+++ branches/13/res/res_musiconhold.c Mon Aug 25 11:44:37 2014
@@ -479,6 +479,8 @@
 	/* Resume MOH from where we left off last time or start from scratch? */
 	if (state->save_total != class->total_files || strcmp(state->name, class->name) != 0) {
 		/* Start MOH from scratch. */
+		ao2_cleanup(state->origwfmt);
+		ao2_cleanup(state->mohwfmt);
 		memset(state, 0, sizeof(*state));
 		if (ast_test_flag(class, MOH_RANDOMIZE) && class->total_files) {
 			state->pos = ast_random() % class->total_files;
@@ -974,6 +976,8 @@
 			mohclass_unref(state->class, "Uh Oh. Restarting MOH with an active class");
 			ast_log(LOG_WARNING, "Uh Oh. Restarting MOH with an active class\n");
 		}
+		ao2_cleanup(state->origwfmt);
+		ao2_cleanup(state->mohwfmt);
 		memset(state, 0, sizeof(*state));
 	}
 
@@ -1304,6 +1308,7 @@
 	struct moh_files_state *state = ast_channel_music_state(chan);
 
 	if (state) {
+		ast_channel_music_state_set(chan, NULL);
 		if (state->class) {
 			/* This should never happen.  We likely just leaked some resource. */
 			state->class =
@@ -1312,8 +1317,7 @@
 		}
 		ao2_cleanup(state->origwfmt);
 		ao2_cleanup(state->mohwfmt);
-		ast_free(ast_channel_music_state(chan));
-		ast_channel_music_state_set(chan, NULL);
+		ast_free(state);
 		/* Only held a module reference if we had a music state */
 		ast_module_unref(ast_module_info->self);
 	}




More information about the asterisk-commits mailing list