https://origsvn.digium.com/svn/asterisk/branches/1.4
........
r81158 | mmichelson | 2007-08-27 17:40:19 -0500 (Mon, 27 Aug 2007) | 5 lines
Resolve a potential deadlock. In this case, a single queue is locked, then the queue list. In changethread(), the queue list is
locked, and then each individual queue is locked. Under the right circumstances, this could deadlock. As such, I have unlocked
the individual queue before locking the queue list, and then locked the queue back after the queue list is unlocked.
........
git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@81159
65c4cc65-6c06-0410-ace0-
fbb531ad65f3
} else {
q->members = next_m;
}
+ ast_mutex_unlock(&q->lock);
remove_from_interfaces(m->interface);
+ ast_mutex_lock(&q->lock);
q->membercount--;
ast_free(m);
} else {
} else {
q->members = next_m;
}
+ ast_mutex_unlock(&q->lock);
remove_from_interfaces(m->interface);
+ ast_mutex_lock(&q->lock);
q->membercount--;
free(m);
} else {