diff --git a/channels/chan_iax2.c b/channels/chan_iax2.c index 6f1aec018bd8d171adf4d8ab2f3a8bc000bacb2d..8fe51b457c8cf072e09898dadb38b554dcbf471e 100644 --- a/channels/chan_iax2.c +++ b/channels/chan_iax2.c @@ -11215,6 +11215,15 @@ immediatedial: } break; case IAX_COMMAND_TXREADY: + if (iaxs[fr->callno]->bridgecallno) { + while (ast_mutex_trylock(&iaxsl[iaxs[fr->callno]->bridgecallno])) { + DEADLOCK_AVOIDANCE(&iaxsl[fr->callno]); + } + if (!iaxs[fr->callno]) { + break; + } + } + if ((iaxs[fr->callno]->transferring == TRANSFER_BEGIN) || (iaxs[fr->callno]->transferring == TRANSFER_MBEGIN)) { if (iaxs[fr->callno]->transferring == TRANSFER_MBEGIN) @@ -11263,6 +11272,9 @@ immediatedial: } } } + if (iaxs[fr->callno]->bridgecallno) { + ast_mutex_unlock(&iaxsl[iaxs[fr->callno]->bridgecallno]); + } break; case IAX_COMMAND_TXREQ: try_transfer(iaxs[fr->callno], &ies);