mirror of
https://github.com/asterisk/asterisk.git
synced 2025-11-10 20:08:16 +00:00
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 ........ Merged revisions 421978 from http://svn.asterisk.org/svn/asterisk/branches/12 git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@421979 65c4cc65-6c06-0410-ace0-fbb531ad65f3
This commit is contained in:
@@ -138,6 +138,8 @@ struct moh_files_state {
|
|||||||
int sample_queue;
|
int sample_queue;
|
||||||
int pos;
|
int pos;
|
||||||
int save_pos;
|
int save_pos;
|
||||||
|
int save_total;
|
||||||
|
char name[MAX_MUSICCLASS];
|
||||||
char save_pos_filename[PATH_MAX];
|
char save_pos_filename[PATH_MAX];
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -474,11 +476,9 @@ static void *moh_files_alloc(struct ast_channel *chan, void *params)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* class is reffed, so we can safely compare it against the (possibly
|
/* Resume MOH from where we left off last time or start from scratch? */
|
||||||
* recently unreffed) state->class. The unref was done after the ref
|
if (state->save_total != class->total_files || strcmp(state->name, class->name) != 0) {
|
||||||
* of class, so we're sure that they won't point to the same memory
|
/* Start MOH from scratch. */
|
||||||
* by accident. */
|
|
||||||
if (state->class != class) {
|
|
||||||
memset(state, 0, sizeof(*state));
|
memset(state, 0, sizeof(*state));
|
||||||
if (ast_test_flag(class, MOH_RANDOMIZE) && class->total_files) {
|
if (ast_test_flag(class, MOH_RANDOMIZE) && class->total_files) {
|
||||||
state->pos = ast_random() % class->total_files;
|
state->pos = ast_random() % class->total_files;
|
||||||
@@ -489,6 +489,9 @@ static void *moh_files_alloc(struct ast_channel *chan, void *params)
|
|||||||
/* it's possible state is not a new allocation, don't leak old refs */
|
/* it's possible state is not a new allocation, don't leak old refs */
|
||||||
ao2_replace(state->origwfmt, ast_channel_writeformat(chan));
|
ao2_replace(state->origwfmt, ast_channel_writeformat(chan));
|
||||||
ao2_replace(state->mohwfmt, ast_channel_writeformat(chan));
|
ao2_replace(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);
|
moh_post_start(chan, class->name);
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user