]> git.ipfire.org Git - thirdparty/asterisk.git/commitdiff
main/cdr: Copy over location information during a fork
authorMatthew Jordan <mjordan@digium.com>
Sat, 6 Sep 2014 22:48:24 +0000 (22:48 +0000)
committerMatthew Jordan <mjordan@digium.com>
Sat, 6 Sep 2014 22:48:24 +0000 (22:48 +0000)
When a CDR is forked, a new CDR is created and appended to the CDR chain for
the Party A. The forked CDR starts life off as a clone of the last
non-finalized for the particular Party A. In the past, merely copying over
the snapshots for Party A/Party B would be sufficient. However, as the CDRs
now contain cached information from Party A - specifically application/data,
context, and extension - we need to copy that over during a fork as well.

Huzzah for unit tests catching this when the context/extension were derived
from a cached value on the CDR instead of on Party A.

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

main/cdr.c

index 1c8b59b149b44c3be68124bbff262db4f4d4687b..42633da79f1abda147e9551a2e36eb1eecf096f6 100644 (file)
@@ -3386,6 +3386,10 @@ int ast_cdr_fork(const char *channel_name, struct ast_flags *options)
                }
                new_cdr->fn_table = cdr_obj->fn_table;
                ast_string_field_set(new_cdr, bridge, cdr->bridge);
+               ast_string_field_set(new_cdr, appl, cdr->appl);
+               ast_string_field_set(new_cdr, data, cdr->data);
+               ast_string_field_set(new_cdr, context, cdr->context);
+               ast_string_field_set(new_cdr, exten, cdr->exten);
                new_cdr->flags = cdr->flags;
                /* Explicitly clear the AST_CDR_LOCK_APP flag - we want
                 * the application to be changed on the new CDR if the