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); -- _____________________________________________________________________ -- Bandwidth and Colocation Provided by http://www.api-digital.com -- svn-commits mailing list To UNSUBSCRIBE or update options visit: http://lists.digium.com/mailman/listinfo/svn-commits