* \note Assumes the pri->lock is already obtained.
* \note Assumes the sig_pri_lock_private(pri->pvts[chanpos]) is already obtained.
*
+ * \note The unlocking/locking sequence now present has been stress tested
+ * without deadlocks. Please don't change it without consulting
+ * core development team members.
+ *
* \return Nothing
*/
static void sig_pri_queue_hangup(struct sig_pri_span *pri, int chanpos)
ast_queue_hangup(owner);
ast_channel_unlock(owner);
- /* Tell the CDR this DAHDI channel hung up */
sig_pri_unlock_private(pri->pvts[chanpos]);
+ ast_mutex_unlock(&pri->lock);
+ /* Tell the CDR this DAHDI channel hung up */
ast_set_hangupsource(owner, ast_channel_name(owner), 0);
+ ast_mutex_lock(&pri->lock);
sig_pri_lock_private(pri->pvts[chanpos]);
ao2_ref(owner, -1);