Merged revisions 67716 via svnmerge from

https://origsvn.digium.com/svn/asterisk/branches/1.4

................
r67716 | russell | 2007-06-06 11:55:59 -0500 (Wed, 06 Jun 2007) | 13 lines

Merged revisions 67715 via svnmerge from 
https://origsvn.digium.com/svn/asterisk/branches/1.2

........
r67715 | russell | 2007-06-06 11:40:51 -0500 (Wed, 06 Jun 2007) | 5 lines

We have some bug reports showing crashes due to a double free of a channel.
Add a sanity check to ast_channel_free() to make sure we don't go on trying
to free a channel that wasn't found in the channel list.
(issue #8850, and others...)

........

................


git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@67717 65c4cc65-6c06-0410-ace0-fbb531ad65f3
This commit is contained in:
Russell Bryant
2007-06-06 16:58:28 +00:00
parent 6ddcfff1c7
commit 18101ff0e3
2 changed files with 11 additions and 4 deletions

View File

@@ -1082,7 +1082,10 @@ void ast_channel_free(struct ast_channel *chan)
headp=&chan->varshead;
AST_LIST_LOCK(&channels);
AST_LIST_REMOVE(&channels, chan, chan_list);
if (!AST_LIST_REMOVE(&channels, chan, chan_list)) {
AST_LIST_UNLOCK(&channels);
ast_log(LOG_ERROR, "Unable to find channel in list to free. Assuming it has already been done.\n");
}
/* Lock and unlock the channel just to be sure nobody
has it locked still */
ast_channel_lock(chan);