Index: res/res_features.c =================================================================== --- res/res_features.c (revision 170391) +++ res/res_features.c (working copy) @@ -1532,11 +1532,25 @@ before the macro started playing. To the phone system, this is billable time for the call, even tho the caller hears nothing but ringing while the macro does its thing. */ - if (peer_cdr && !ast_tvzero(peer_cdr->answer)) { + /* Another case where the peer cdr's time will be set, is when + A self-parks by pickup up phone and dialing 700, then B + picks up A by dialing its parking slot; there may be more + practical paths that get the same result, tho... in which + case you get the previous answer time from the Park... which + is before the bridge's start time, so I added in the + 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; chan_cdr->answer = peer_cdr->answer; bridge_cdr->disposition = peer_cdr->disposition; chan_cdr->disposition = peer_cdr->disposition; + } else 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->start = peer_cdr->start; + chan_cdr->answer = peer_cdr->answer; + chan_cdr->start = peer_cdr->start; + bridge_cdr->disposition = peer_cdr->disposition; + chan_cdr->disposition = peer_cdr->disposition; } else { ast_cdr_answer(bridge_cdr); ast_cdr_answer(chan_cdr); /* for the sake of cli status checks */