From e7626bb3ce6a891d412a83c7a316dda900b57338 Mon Sep 17 00:00:00 2001 From: Martin Pycko Date: Thu, 13 Nov 2003 23:49:15 +0000 Subject: [PATCH] Fix deadlock in iax git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@1745 65c4cc65-6c06-0410-ace0-fbb531ad65f3 --- channels/chan_iax.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/channels/chan_iax.c b/channels/chan_iax.c index ce36153..231eec5 100755 --- a/channels/chan_iax.c +++ b/channels/chan_iax.c @@ -3774,7 +3774,13 @@ static int socket_read(int *id, int fd, short events, void *cbdata) ast_log(LOG_DEBUG, "Ooh, voice format changed to %s\n", ast_getformatname(f.subclass)); if (iaxs[fr.callno]->owner) { int orignative; - ast_mutex_lock(&iaxs[fr.callno]->owner->lock); +retryowner: + if (ast_mutex_trylock(&iaxs[fr.callno]->owner->lock)) { + ast_mutex_unlock(&iaxsl[fr.callno]); + usleep(1); + ast_mutex_lock(&iaxsl[fr.callno]); + if (iaxs[fr.callno] && iaxs[fr.callno]->owner) goto retryowner; + } orignative = iaxs[fr.callno]->owner->nativeformats; iaxs[fr.callno]->owner->nativeformats = f.subclass; if (iaxs[fr.callno]->owner->readformat) -- 1.7.9.5