mirror of
https://github.com/asterisk/asterisk.git
synced 2025-10-03 11:11:05 +00:00
Merged revisions 279946 via svnmerge from
https://origsvn.digium.com/svn/asterisk/branches/1.6.2 ................ r279946 | dvossel | 2010-07-27 15:54:32 -0500 (Tue, 27 Jul 2010) | 24 lines Merged revisions 279945 via svnmerge from https://origsvn.digium.com/svn/asterisk/branches/1.4 ........ r279945 | dvossel | 2010-07-27 15:33:40 -0500 (Tue, 27 Jul 2010) | 19 lines remove empty audiohook write list on channel If a channel has an audiohook write list created on it, that list stays on the channel until the channel is destroyed. There is no reason to keep that list on the channel if it becomes empty. If it is empty that just means we are doing needless translating for every ast_read and ast_write. This patch removes the audiohook list from the channel once it is detected to be empty on either a read or write. If a audiohook is added back to the channel after this list is destroyed, the list just gets recreated as if it never existed to begin with. (closes issue #17630) Reported by: manvirr Review: https://reviewboard.asterisk.org/r/799/ ........ ................ git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.8@279949 65c4cc65-6c06-0410-ace0-fbb531ad65f3
This commit is contained in:
@@ -4064,6 +4064,11 @@ done:
|
||||
if (chan->music_state && chan->generator && chan->generator->digit && f && f->frametype == AST_FRAME_DTMF_END)
|
||||
chan->generator->digit(chan, f->subclass.integer);
|
||||
|
||||
if (chan->audiohooks && ast_audiohook_write_list_empty(chan->audiohooks)) {
|
||||
/* The list gets recreated if audiohooks are added again later */
|
||||
ast_audiohook_detach_list(chan->audiohooks);
|
||||
chan->audiohooks = NULL;
|
||||
}
|
||||
ast_channel_unlock(chan);
|
||||
return f;
|
||||
}
|
||||
@@ -4801,6 +4806,11 @@ int ast_write(struct ast_channel *chan, struct ast_frame *fr)
|
||||
chan->fout = FRAMECOUNT_INC(chan->fout);
|
||||
}
|
||||
done:
|
||||
if (chan->audiohooks && ast_audiohook_write_list_empty(chan->audiohooks)) {
|
||||
/* The list gets recreated if audiohooks are added again later */
|
||||
ast_audiohook_detach_list(chan->audiohooks);
|
||||
chan->audiohooks = NULL;
|
||||
}
|
||||
ast_channel_unlock(chan);
|
||||
return res;
|
||||
}
|
||||
|
Reference in New Issue
Block a user