aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--res/res_musiconhold.c12
1 files changed, 3 insertions, 9 deletions
diff --git a/res/res_musiconhold.c b/res/res_musiconhold.c
index a67999d65..9a970f7f2 100644
--- a/res/res_musiconhold.c
+++ b/res/res_musiconhold.c
@@ -202,7 +202,7 @@ static void moh_files_release(struct ast_channel *chan, void *data)
state->save_pos = state->pos;
- state->class = mohclass_unref(state->class);
+ mohclass_unref(state->class);
}
@@ -307,8 +307,6 @@ static void *moh_files_alloc(struct ast_channel *chan, void *params)
if (!chan->music_state && (state = ast_calloc(1, sizeof(*state)))) {
chan->music_state = state;
- state->class = mohclass_ref(class);
- state->save_pos = -1;
} else {
state = chan->music_state;
}
@@ -318,17 +316,13 @@ static void *moh_files_alloc(struct ast_channel *chan, void *params)
}
if (state->class != class) {
- /* (re-)initialize */
- if (state->class) {
- state->class = mohclass_unref(state->class);
- }
memset(state, 0, sizeof(*state));
- state->class = mohclass_ref(class);
- if (ast_test_flag(state->class, MOH_RANDOMIZE) && class->total_files) {
+ if (ast_test_flag(class, MOH_RANDOMIZE) && class->total_files) {
state->pos = ast_random() % class->total_files;
}
}
+ state->class = mohclass_ref(class);
state->origwfmt = chan->writeformat;
if (option_verbose > 2) {