diff options
author | markster <markster@f38db490-d61c-443f-a65b-d21fe96a405b> | 2004-12-24 01:40:07 +0000 |
---|---|---|
committer | markster <markster@f38db490-d61c-443f-a65b-d21fe96a405b> | 2004-12-24 01:40:07 +0000 |
commit | 05c1466c552ff0085a191038e034030a3681d53e (patch) | |
tree | 5b80a7b0d9f29485a99055442adc6b277aa4357f /channel.c | |
parent | 461f9cdb357b9dd51ed1072b61310424d0db22d6 (diff) |
Merge anthm's native MOH patch (bug #2639) he promises me he'll rid it of ast_flag_moh...
git-svn-id: http://svn.digium.com/svn/asterisk/trunk@4552 f38db490-d61c-443f-a65b-d21fe96a405b
Diffstat (limited to 'channel.c')
-rwxr-xr-x | channel.c | 19 |
1 files changed, 17 insertions, 2 deletions
@@ -613,6 +613,10 @@ void ast_channel_free(struct ast_channel *chan) chan->monitor->stop( chan, 0 ); } + /* If there is native format music-on-hold state, free it */ + if(chan->music_state) + ast_moh_cleanup(chan); + /* Free translatosr */ if (chan->pvt->readtrans) ast_translator_free_path(chan->pvt->readtrans); @@ -2960,22 +2964,26 @@ unsigned int ast_get_group(char *s) return group; } - static int (*ast_moh_start_ptr)(struct ast_channel *, char *) = NULL; static void (*ast_moh_stop_ptr)(struct ast_channel *) = NULL; +static void (*ast_moh_cleanup_ptr)(struct ast_channel *) = NULL; void ast_install_music_functions(int (*start_ptr)(struct ast_channel *, char *), - void (*stop_ptr)(struct ast_channel *)) + void (*stop_ptr)(struct ast_channel *), + void (*cleanup_ptr)(struct ast_channel *) + ) { ast_moh_start_ptr = start_ptr; ast_moh_stop_ptr = stop_ptr; + ast_moh_cleanup_ptr = cleanup_ptr; } void ast_uninstall_music_functions(void) { ast_moh_start_ptr = NULL; ast_moh_stop_ptr = NULL; + ast_moh_cleanup_ptr = NULL; } /*! Turn on/off music on hold on a given channel */ @@ -2996,3 +3004,10 @@ void ast_moh_stop(struct ast_channel *chan) if(ast_moh_stop_ptr) ast_moh_stop_ptr(chan); } + +void ast_moh_cleanup(struct ast_channel *chan) +{ + if(ast_moh_cleanup_ptr) + ast_moh_cleanup_ptr(chan); +} + |