aboutsummaryrefslogtreecommitdiffstats
path: root/channel.c
diff options
context:
space:
mode:
authormarkster <markster@f38db490-d61c-443f-a65b-d21fe96a405b>2004-12-24 01:40:07 +0000
committermarkster <markster@f38db490-d61c-443f-a65b-d21fe96a405b>2004-12-24 01:40:07 +0000
commit05c1466c552ff0085a191038e034030a3681d53e (patch)
tree5b80a7b0d9f29485a99055442adc6b277aa4357f /channel.c
parent461f9cdb357b9dd51ed1072b61310424d0db22d6 (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-xchannel.c19
1 files changed, 17 insertions, 2 deletions
diff --git a/channel.c b/channel.c
index 879e8fd08..c30f3838e 100755
--- a/channel.c
+++ b/channel.c
@@ -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);
+}
+