]> git.ipfire.org Git - thirdparty/asterisk.git/commitdiff
Merged revisions 275682 via svnmerge from
authorJeff Peeler <jpeeler@digium.com>
Mon, 12 Jul 2010 17:26:10 +0000 (17:26 +0000)
committerJeff Peeler <jpeeler@digium.com>
Mon, 12 Jul 2010 17:26:10 +0000 (17:26 +0000)
https://origsvn.digium.com/svn/asterisk/trunk

................
  r275682 | jpeeler | 2010-07-12 12:21:01 -0500 (Mon, 12 Jul 2010) | 18 lines

  Merged revisions 275665 via svnmerge from
  https://origsvn.digium.com/svn/asterisk/branches/1.4

  ........
    r275665 | jpeeler | 2010-07-12 11:58:39 -0500 (Mon, 12 Jul 2010) | 11 lines

    Change ast_write to not stop generator when called from ast_prod.

    For SIP channels configured with the progressinband option on, the ringback was
    being immediately stopped. This problem was due to ast_prod being moved for a
    deadlock fix in 259858. Prodding the channel after setting up the generator
    triggered the check in ast_write to stop the generator. The fix here should
    write the frame the same as was done before the call to ast_prod was moved.

    (closes issue #17372)
    Reported by: tech_admin
  ........
................

git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.6.2@275706 65c4cc65-6c06-0410-ace0-fbb531ad65f3

main/channel.c

index 2e58c42aaf8fa39397a34a3e06437fd8a6c496ed..71081bde13c466f3777adbb7c8d7050686c1c57b 100644 (file)
@@ -3454,7 +3454,7 @@ int ast_prod(struct ast_channel *chan)
                ast_debug(1, "Prodding channel '%s'\n", chan->name);
                a.subclass = chan->rawwriteformat;
                a.data.ptr = nothing + AST_FRIENDLY_OFFSET;
-               a.src = "ast_prod";
+               a.src = "ast_prod"; /* this better match check in ast_write */
                if (ast_write(chan, &a))
                        ast_log(LOG_WARNING, "Prodding channel '%s' failed\n", chan->name);
        }
@@ -3604,10 +3604,10 @@ int ast_write(struct ast_channel *chan, struct ast_frame *fr)
                res = 0;        /* XXX explain, why 0 ? */
                goto done;
        }
-       if (chan->generatordata) {
-               if (ast_test_flag(chan, AST_FLAG_WRITE_INT))
-                       ast_deactivate_generator(chan);
-               else {
+       if (chan->generatordata && strcasecmp(fr->src, "ast_prod")) {
+               if (ast_test_flag(chan, AST_FLAG_WRITE_INT)) {
+                               ast_deactivate_generator(chan);
+               else {
                        if (fr->frametype == AST_FRAME_DTMF_END) {
                                /* There is a generator running while we're in the middle of a digit.
                                 * It's probably inband DTMF, so go ahead and pass it so it can