aboutsummaryrefslogtreecommitdiffstats
path: root/main
diff options
context:
space:
mode:
authorfile <file@f38db490-d61c-443f-a65b-d21fe96a405b>2007-06-27 20:25:24 +0000
committerfile <file@f38db490-d61c-443f-a65b-d21fe96a405b>2007-06-27 20:25:24 +0000
commitc9e6bded5edb46a85f77947a9428fe9ba7ac333e (patch)
treed6ca8af19d578f7e86bc276dc6422c48d3bc8bad /main
parentffde94e3939164e7d39e2c74f33ef0357bd47b3e (diff)
Merged revisions 72256 via svnmerge from
https://origsvn.digium.com/svn/asterisk/branches/1.2 ........ r72256 | file | 2007-06-27 16:23:24 -0400 (Wed, 27 Jun 2007) | 2 lines I may possibly get shot for doing this... but... defer CDR processing until after the channel has been dealt with. This should eliminate all of the issues with channels going funky (SIP/PRI) when you are posting CDRs to a database that is either slow or unavailable and do not want to enable batching. ........ git-svn-id: http://svn.digium.com/svn/asterisk/branches/1.4@72257 f38db490-d61c-443f-a65b-d21fe96a405b
Diffstat (limited to 'main')
-rw-r--r--main/channel.c7
1 files changed, 6 insertions, 1 deletions
diff --git a/main/channel.c b/main/channel.c
index 63158678b..06337f44d 100644
--- a/main/channel.c
+++ b/main/channel.c
@@ -1697,6 +1697,7 @@ static void free_translation(struct ast_channel *clone)
int ast_hangup(struct ast_channel *chan)
{
int res = 0;
+ struct ast_cdr *cdr = NULL;
/* Don't actually hang up a channel that will masquerade as someone else, or
if someone is going to masquerade as us */
@@ -1743,7 +1744,7 @@ int ast_hangup(struct ast_channel *chan)
chan->generator = NULL;
if (chan->cdr) { /* End the CDR if it hasn't already */
ast_cdr_end(chan->cdr);
- ast_cdr_detach(chan->cdr); /* Post and Free the CDR */
+ cdr = chan->cdr;
chan->cdr = NULL;
}
if (ast_test_flag(chan, AST_FLAG_BLOCKING)) {
@@ -1774,6 +1775,10 @@ int ast_hangup(struct ast_channel *chan)
ast_cause2str(chan->hangupcause)
);
ast_channel_free(chan);
+
+ if (cdr)
+ ast_cdr_detach(cdr);
+
return res;
}