aboutsummaryrefslogtreecommitdiffstats
path: root/main
diff options
context:
space:
mode:
authorrussell <russell@f38db490-d61c-443f-a65b-d21fe96a405b>2010-11-24 20:23:46 +0000
committerrussell <russell@f38db490-d61c-443f-a65b-d21fe96a405b>2010-11-24 20:23:46 +0000
commitfef331e1cbfff64c391cabb8f8fe555766f9145e (patch)
tree2211549cd1c1f58a5df2b5d2f44184fc097d5f53 /main
parent21e52ac961f38daa8539f0c9a2efce7238a10403 (diff)
Merged revisions 296083 via svnmerge from
https://origsvn.digium.com/svn/asterisk/branches/1.6.2 ................ r296083 | russell | 2010-11-24 14:23:11 -0600 (Wed, 24 Nov 2010) | 19 lines Merged revisions 296082 via svnmerge from https://origsvn.digium.com/svn/asterisk/branches/1.4 ........ r296082 | russell | 2010-11-24 14:22:32 -0600 (Wed, 24 Nov 2010) | 12 lines 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: http://svn.digium.com/svn/asterisk/branches/1.8@296084 f38db490-d61c-443f-a65b-d21fe96a405b
Diffstat (limited to 'main')
-rw-r--r--main/channel.c24
1 files changed, 17 insertions, 7 deletions
diff --git a/main/channel.c b/main/channel.c
index b0bdede94..259a9f324 100644
--- a/main/channel.c
+++ b/main/channel.c
@@ -4994,13 +4994,23 @@ static int set_format(struct ast_channel *chan, format_t fmt, format_t *rawforma
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);
ast_debug(1, "Set channel %s to %s format %s\n", chan->name,
direction ? "write" : "read", ast_getformatname(fmt));