]> git.ipfire.org Git - thirdparty/asterisk.git/commitdiff
Merged revisions 296083 via svnmerge from
authorRussell Bryant <russell@russellbryant.com>
Wed, 24 Nov 2010 20:23:46 +0000 (20:23 +0000)
committerRussell Bryant <russell@russellbryant.com>
Wed, 24 Nov 2010 20:23:46 +0000 (20:23 +0000)
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: https://origsvn.digium.com/svn/asterisk/branches/1.8@296084 65c4cc65-6c06-0410-ace0-fbb531ad65f3

main/channel.c

index b0bdede94f3a2a28a5e7ea9ff1272442786f1e2a..259a9f324e42277adb9b73105e3ec0c67058eec0 100644 (file)
@@ -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));