[svn-commits] russell: branch 1.2 r67715 - /branches/1.2/channel.c
svn-commits at lists.digium.com
svn-commits at lists.digium.com
Wed Jun 6 09:40:51 MST 2007
Author: russell
Date: Wed Jun 6 11:40:51 2007
New Revision: 67715
URL: http://svn.digium.com/view/asterisk?view=rev&rev=67715
Log:
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...)
Modified:
branches/1.2/channel.c
Modified: branches/1.2/channel.c
URL: http://svn.digium.com/view/asterisk/branches/1.2/channel.c?view=diff&rev=67715&r1=67714&r2=67715
==============================================================================
--- branches/1.2/channel.c (original)
+++ branches/1.2/channel.c Wed Jun 6 11:40:51 2007
@@ -897,14 +897,16 @@
last = cur;
cur = cur->next;
}
- if (!cur)
- ast_log(LOG_WARNING, "Unable to find channel in list\n");
- else {
- /* Lock and unlock the channel just to be sure nobody
- has it locked still */
- ast_mutex_lock(&cur->lock);
- ast_mutex_unlock(&cur->lock);
- }
+ if (!cur) {
+ ast_mutex_unlock(&chlock);
+ ast_log(LOG_ERROR, "Unable to find channel in list to free. Assuming it has already been done.\n");
+ return;
+ }
+
+ /* Lock and unlock the channel just to be sure nobody
+ has it locked still */
+ ast_mutex_lock(&cur->lock);
+ ast_mutex_unlock(&cur->lock);
if (chan->tech_pvt) {
ast_log(LOG_WARNING, "Channel '%s' may not have been hung up properly\n", chan->name);
free(chan->tech_pvt);
More information about the svn-commits
mailing list