diff options
author | jpeeler <jpeeler@f38db490-d61c-443f-a65b-d21fe96a405b> | 2010-07-12 16:58:39 +0000 |
---|---|---|
committer | jpeeler <jpeeler@f38db490-d61c-443f-a65b-d21fe96a405b> | 2010-07-12 16:58:39 +0000 |
commit | e161f60f939d1209d24637b4c287c5a6bd3e20a5 (patch) | |
tree | 3095ded6ce9e160c7dd210ff3a9080186088d5a9 /main | |
parent | 373c3b2add5f99c13a00db4a927479659f9669d2 (diff) |
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/branches/1.4@275665 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 b10c07cfe..a745aa6cd 100644 --- a/main/channel.c +++ b/main/channel.c @@ -2893,7 +2893,7 @@ int ast_prod(struct ast_channel *chan) ast_log(LOG_DEBUG, "Prodding channel '%s'\n", chan->name); a.subclass = chan->rawwriteformat; a.data = 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); } @@ -3044,10 +3044,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 |