diff options
author | jpeeler <jpeeler@f38db490-d61c-443f-a65b-d21fe96a405b> | 2010-07-12 17:21:01 +0000 |
---|---|---|
committer | jpeeler <jpeeler@f38db490-d61c-443f-a65b-d21fe96a405b> | 2010-07-12 17:21:01 +0000 |
commit | 28092cb5d2fa9a4a84abe05adc79f40d3ca692c9 (patch) | |
tree | 9d66e26ff867880c3d7ca92b8f38e472286b4df6 /main | |
parent | fe292142cbe20a62cca68ff78d4473f9978d8587 (diff) |
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: http://svn.digium.com/svn/asterisk/trunk@275682 f38db490-d61c-443f-a65b-d21fe96a405b
Diffstat (limited to 'main')
-rw-r--r-- | main/channel.c | 10 |
1 files changed, 5 insertions, 5 deletions
diff --git a/main/channel.c b/main/channel.c index 6007ed2b5..be52b532c 100644 --- a/main/channel.c +++ b/main/channel.c @@ -4271,7 +4271,7 @@ int ast_prod(struct ast_channel *chan) ast_debug(1, "Prodding channel '%s'\n", chan->name); a.subclass.codec = 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); } @@ -4425,10 +4425,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 |