diff options
author | twilson <twilson@f38db490-d61c-443f-a65b-d21fe96a405b> | 2010-04-19 17:57:41 +0000 |
---|---|---|
committer | twilson <twilson@f38db490-d61c-443f-a65b-d21fe96a405b> | 2010-04-19 17:57:41 +0000 |
commit | 70a3bcbb4ecbe8bfbbabf073eacd0f37d395ea32 (patch) | |
tree | 20397b5f955145d62e49c27dfe4278917f85f992 /main/features.c | |
parent | ab2736a9658f0aae3f796fed84cae8fbf0f978d0 (diff) |
Fix incomplete CDR merge from r195881
Because res/res_features.c was removed and main/cdr.c added, these changes
didn't make it to trunk and the 1.6.x branches
git-svn-id: http://svn.digium.com/svn/asterisk/trunk@257810 f38db490-d61c-443f-a65b-d21fe96a405b
Diffstat (limited to 'main/features.c')
-rw-r--r-- | main/features.c | 16 |
1 files changed, 10 insertions, 6 deletions
diff --git a/main/features.c b/main/features.c index 0041b2782..1aaf33a25 100644 --- a/main/features.c +++ b/main/features.c @@ -2950,8 +2950,8 @@ int ast_bridge_call(struct ast_channel *chan,struct ast_channel *peer,struct ast struct ast_option_header *aoh; struct ast_cdr *bridge_cdr = NULL; struct ast_cdr *orig_peer_cdr = NULL; - struct ast_cdr *chan_cdr = pick_unlocked_cdr(chan->cdr); /* the proper chan cdr, if there are forked cdrs */ - struct ast_cdr *peer_cdr = pick_unlocked_cdr(peer->cdr); /* the proper chan cdr, if there are forked cdrs */ + struct ast_cdr *chan_cdr = chan->cdr; /* the proper chan cdr, if there are forked cdrs */ + struct ast_cdr *peer_cdr = peer->cdr; /* the proper chan cdr, if there are forked cdrs */ struct ast_cdr *new_chan_cdr = NULL; /* the proper chan cdr, if there are forked cdrs */ struct ast_cdr *new_peer_cdr = NULL; /* the proper chan cdr, if there are forked cdrs */ @@ -3028,6 +3028,10 @@ int ast_bridge_call(struct ast_channel *chan,struct ast_channel *peer,struct ast ast_set_flag(chan_cdr, AST_CDR_FLAG_MAIN); ast_cdr_update(chan); bridge_cdr = ast_cdr_dup_unique_swap(chan_cdr); + /* rip any forked CDR's off of the chan_cdr and attach + * them to the bridge_cdr instead */ + bridge_cdr->next = chan_cdr->next; + chan_cdr->next = NULL; ast_copy_string(bridge_cdr->lastapp, S_OR(chan->appl, ""), sizeof(bridge_cdr->lastapp)); ast_copy_string(bridge_cdr->lastdata, S_OR(chan->data, ""), sizeof(bridge_cdr->lastdata)); if (peer_cdr && !ast_strlen_zero(peer_cdr->userfield)) { @@ -3074,11 +3078,11 @@ int ast_bridge_call(struct ast_channel *chan,struct ast_channel *peer,struct ast tvcmp check to the if below */ if (peer_cdr && !ast_tvzero(peer_cdr->answer) && ast_tvcmp(peer_cdr->answer, bridge_cdr->start) >= 0) { - bridge_cdr->answer = peer_cdr->answer; - bridge_cdr->disposition = peer_cdr->disposition; + ast_cdr_setanswer(bridge_cdr, peer_cdr->answer); + ast_cdr_setdisposition(bridge_cdr, peer_cdr->disposition); if (chan_cdr) { - chan_cdr->answer = peer_cdr->answer; - chan_cdr->disposition = peer_cdr->disposition; + ast_cdr_setanswer(chan_cdr, peer_cdr->answer); + ast_cdr_setdisposition(chan_cdr, peer_cdr->disposition); } } else { ast_cdr_answer(bridge_cdr); |