[asterisk-commits] rmudgett: branch 12 r421978 - in /branches/12: ./ res/res_musiconhold.c

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


Author: rmudgett
Date: Mon Aug 25 11:11:19 2014
New Revision: 421978

URL: http://svnview.digium.com/svn/asterisk?view=rev&rev=421978
Log:
res_musiconhold: Fix MOH restarting where it left off from the last hold.

Restore code removed by https://reviewboard.asterisk.org/r/3536/ that
introduced a regression that prevents MOH from restarting were it left off
the last time.

ASTERISK-24019 #close
Reported by: Jason Richards
Patches:
      jira_asterisk_24019_v1.8.patch (license #5621) patch uploaded by rmudgett

Review: https://reviewboard.asterisk.org/r/3928/
........

Merged revisions 421976 from http://svn.asterisk.org/svn/asterisk/branches/1.8
........

Merged revisions 421977 from http://svn.asterisk.org/svn/asterisk/branches/11

Modified:
    branches/12/   (props changed)
    branches/12/res/res_musiconhold.c

Propchange: branches/12/
------------------------------------------------------------------------------
Binary property 'branch-11-merged' - no diff available.

Modified: branches/12/res/res_musiconhold.c
URL: http://svnview.digium.com/svn/asterisk/branches/12/res/res_musiconhold.c?view=diff&rev=421978&r1=421977&r2=421978
==============================================================================
--- branches/12/res/res_musiconhold.c (original)
+++ branches/12/res/res_musiconhold.c Mon Aug 25 11:11:19 2014
@@ -170,6 +170,8 @@
 	int sample_queue;
 	int pos;
 	int save_pos;
+	int save_total;
+	char name[MAX_MUSICCLASS];
 	char save_pos_filename[PATH_MAX];
 };
 
@@ -502,11 +504,9 @@
 		}
 	}
 
-	/* class is reffed, so we can safely compare it against the (possibly
-	 * recently unreffed) state->class. The unref was done after the ref
-	 * of class, so we're sure that they won't point to the same memory
-	 * by accident. */
-	if (state->class != class) {
+	/* 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. */
 		memset(state, 0, sizeof(*state));
 		if (ast_test_flag(class, MOH_RANDOMIZE) && class->total_files) {
 			state->pos = ast_random() % class->total_files;
@@ -516,6 +516,9 @@
 	state->class = mohclass_ref(class, "Reffing music class for channel");
 	ast_format_copy(&state->origwfmt, ast_channel_writeformat(chan));
 	ast_format_copy(&state->mohwfmt, ast_channel_writeformat(chan));
+	/* For comparison on restart of MOH (see above) */
+	ast_copy_string(state->name, class->name, sizeof(state->name));
+	state->save_total = class->total_files;
 
 	moh_post_start(chan, class->name);
 




More information about the asterisk-commits mailing list