Fix false reporting of an error by set_format().

In the case that the native format was able to be changed to match the
new requested format, the code proceeded to attempt to build a translation
path, anyway.  The result would be NULL, since no translation path is
necessary and resulted in this function thinking an error has occurred.
This case is now specifically caught and no attempt to build a translation
path is attempted.

Thanks to our automated tests and bamboo.asterisk.org for catching this problem
and making a whole lot of noise when things started failing.  :-)


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.4@296082 65c4cc65-6c06-0410-ace0-fbb531ad65f3
1.4
Russell Bryant 15 years ago
parent 72d3cd8b47
commit 41656ad0bf

@ -3403,13 +3403,23 @@ static int set_format(struct ast_channel *chan, int fmt, int *rawformat, int *fo
if (*trans)
ast_translator_free_path(*trans);
/* Build a translation path from the raw format to the desired format */
if (!direction)
/* reading */
*trans = ast_translator_build_path(*format, *rawformat);
else
/* writing */
*trans = ast_translator_build_path(*rawformat, *format);
res = *trans ? 0 : -1;
if (*format == *rawformat) {
/*
* If we were able to swap the native format to the format that
* has been requested, then there is no need to try to build
* a translation path.
*/
res = 0;
} else {
if (!direction) {
/* reading */
*trans = ast_translator_build_path(*format, *rawformat);
} else {
/* writing */
*trans = ast_translator_build_path(*rawformat, *format);
}
res = *trans ? 0 : -1;
}
ast_channel_unlock(chan);
if (option_debug)
ast_log(LOG_DEBUG, "Set channel %s to %s format %s\n", chan->name,

Loading…
Cancel
Save