[Asterisk-cvs] asterisk/channels chan_iax.c,1.38,1.39

martinp at lists.digium.com martinp at lists.digium.com
Thu Nov 13 17:23:00 CST 2003


Update of /usr/cvsroot/asterisk/channels
In directory mongoose.digium.com:/tmp/cvs-serv2152/channels

Modified Files:
	chan_iax.c 
Log Message:
Fix deadlock in iax


Index: chan_iax.c
===================================================================
RCS file: /usr/cvsroot/asterisk/channels/chan_iax.c,v
retrieving revision 1.38
retrieving revision 1.39
diff -u -d -r1.38 -r1.39
--- chan_iax.c	13 Nov 2003 16:25:52 -0000	1.38
+++ chan_iax.c	13 Nov 2003 23:49:15 -0000	1.39
@@ -3774,7 +3774,13 @@
 					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)




More information about the svn-commits mailing list