More deadlock avoidance code (this time between sip_monitor and sip_hangup)

Reported by: apsaras
Patch by: tilghman
(Closes issue #11413)


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.4@94765 65c4cc65-6c06-0410-ace0-fbb531ad65f3
1.4
Tilghman Lesher 18 years ago
parent f26935218f
commit 9dbd385de7

@ -15497,7 +15497,14 @@ restartsearch:
get back to this point every millisecond or less)
*/
for (sip = iflist; !fastrestart && sip; sip = sip->next) {
ast_mutex_lock(&sip->lock);
/*! \note If we can't get a lock on an interface, skip it and come
* back later. Note that there is the possibility of a deadlock with
* sip_hangup otherwise, because sip_hangup is called with the channel
* locked first, and the iface lock is attempted second.
*/
if (ast_mutex_trylock(&sip->lock))
continue;
/* Check RTP timeouts and kill calls if we have a timeout set and do not get RTP */
if (sip->rtp && sip->owner &&
(sip->owner->_state == AST_STATE_UP) &&

Loading…
Cancel
Save