Merged revisions 68683 via svnmerge from

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

................
r68683 | file | 2007-06-11 10:33:12 -0400 (Mon, 11 Jun 2007) | 10 lines

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

........
r68682 | file | 2007-06-11 10:29:58 -0400 (Mon, 11 Jun 2007) | 2 lines

Improve deadlock handling of the channel list. (issue #8376 reported by one47)

........

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


git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@68684 65c4cc65-6c06-0410-ace0-fbb531ad65f3
1.6.0
Joshua Colp 19 years ago
parent 21f5078843
commit eb56cb6b92

@ -977,19 +977,28 @@ static struct ast_channel *channel_find_locked(const struct ast_channel *prev,
if (!done) {
if (option_debug)
ast_log(LOG_DEBUG, "Avoiding %s for channel '%p'\n", msg, c);
if (retries == 9) {
/* We are about to fail due to a deadlock, so report this
* while we still have the list lock.
*/
if (option_debug)
ast_log(LOG_DEBUG, "Failure, could not lock '%p' after %d retries!\n", c, retries);
/* As we have deadlocked, we will skip this channel and
* see if there is another match.
* NOTE: No point doing this for a full-name match,
* as there can be no more matches.
*/
if (!(name && !namelen)) {
prev = c;
retries = -1;
}
}
}
AST_LIST_UNLOCK(&channels);
if (done)
return c;
usleep(1); /* give other threads a chance before retrying */
}
/*
* c is surely not null, but we don't have the lock so cannot
* access c->name
*/
if (option_debug)
ast_log(LOG_DEBUG, "Failure, could not lock '%p' after %d retries!\n",
c, retries);
return NULL;
}

Loading…
Cancel
Save