Hold owner lock when changing codecs

git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@2529 65c4cc65-6c06-0410-ace0-fbb531ad65f3
1.0
Mark Spencer 22 years ago
parent 67af82457e
commit 3107d6d03b

@ -4948,6 +4948,15 @@ retryowner:
iaxs[fr.callno]->owner->nativeformats = iaxs[fr.callno]->peerformat; iaxs[fr.callno]->owner->nativeformats = iaxs[fr.callno]->peerformat;
if (option_verbose > 2) if (option_verbose > 2)
ast_verbose(VERBOSE_PREFIX_3 "Format for call is %s\n", ast_getformatname(iaxs[fr.callno]->owner->nativeformats)); ast_verbose(VERBOSE_PREFIX_3 "Format for call is %s\n", ast_getformatname(iaxs[fr.callno]->owner->nativeformats));
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. */ /* Setup read/write formats properly. */
if (iaxs[fr.callno]->owner->writeformat) if (iaxs[fr.callno]->owner->writeformat)
ast_set_write_format(iaxs[fr.callno]->owner, iaxs[fr.callno]->owner->writeformat); ast_set_write_format(iaxs[fr.callno]->owner, iaxs[fr.callno]->owner->writeformat);
@ -4955,6 +4964,7 @@ retryowner:
ast_set_read_format(iaxs[fr.callno]->owner, iaxs[fr.callno]->owner->readformat); ast_set_read_format(iaxs[fr.callno]->owner, iaxs[fr.callno]->owner->readformat);
} }
} }
}
ast_mutex_lock(&dpcache_lock); ast_mutex_lock(&dpcache_lock);
dp = iaxs[fr.callno]->dpentries; dp = iaxs[fr.callno]->dpentries;
while(dp) { while(dp) {

Loading…
Cancel
Save