[Asterisk-cvs] asterisk/channels chan_iax2.c,1.91.2.10,1.91.2.11
markster at lists.digium.com
markster at lists.digium.com
Wed Mar 24 16:27:46 CST 2004
Update of /usr/cvsroot/asterisk/channels
In directory mongoose.digium.com:/tmp/cvs-serv19301/channels
Modified Files:
Tag: v1-0_stable
chan_iax2.c
Log Message:
Backport format locking patch
Index: chan_iax2.c
===================================================================
RCS file: /usr/cvsroot/asterisk/channels/chan_iax2.c,v
retrieving revision 1.91.2.10
retrieving revision 1.91.2.11
diff -u -d -r1.91.2.10 -r1.91.2.11
--- chan_iax2.c 21 Mar 2004 11:23:25 -0000 1.91.2.10
+++ chan_iax2.c 24 Mar 2004 21:24:33 -0000 1.91.2.11
@@ -4577,11 +4577,22 @@
iaxs[fr.callno]->owner->nativeformats = iaxs[fr.callno]->peerformat;
if (option_verbose > 2)
ast_verbose(VERBOSE_PREFIX_3 "Format for call is %s\n", ast_getformatname(iaxs[fr.callno]->owner->nativeformats));
- /* Setup read/write formats properly. */
- if (iaxs[fr.callno]->owner->writeformat)
- ast_set_write_format(iaxs[fr.callno]->owner, iaxs[fr.callno]->owner->writeformat);
- if (iaxs[fr.callno]->owner->readformat)
- ast_set_read_format(iaxs[fr.callno]->owner, iaxs[fr.callno]->owner->readformat);
+retryowner2:
+ 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 retryowner2;
+ }
+
+ if (iaxs[fr.callno] && iaxs[fr.callno]->owner) {
+ /* Setup read/write formats properly. */
+ if (iaxs[fr.callno]->owner->writeformat)
+ ast_set_write_format(iaxs[fr.callno]->owner, iaxs[fr.callno]->owner->writeformat);
+ if (iaxs[fr.callno]->owner->readformat)
+ ast_set_read_format(iaxs[fr.callno]->owner, iaxs[fr.callno]->owner->readformat);
+ ast_mutex_unlock(&iaxs[fr.callno]->owner->lock);
+ }
}
}
ast_mutex_lock(&dpcache_lock);
More information about the svn-commits
mailing list