]> git.ipfire.org Git - thirdparty/asterisk.git/commitdiff
Merged revisions 203376 via svnmerge from
authorRussell Bryant <russell@russellbryant.com>
Thu, 25 Jun 2009 21:07:14 +0000 (21:07 +0000)
committerRussell Bryant <russell@russellbryant.com>
Thu, 25 Jun 2009 21:07:14 +0000 (21:07 +0000)
https://origsvn.digium.com/svn/asterisk/trunk

................
  r203376 | russell | 2009-06-25 16:04:55 -0500 (Thu, 25 Jun 2009) | 16 lines

  Merged revisions 203375 via svnmerge from
  https://origsvn.digium.com/svn/asterisk/branches/1.4

  ........
    r203375 | russell | 2009-06-25 16:02:18 -0500 (Thu, 25 Jun 2009) | 9 lines

    Fix a case where CDR answer time could be before the start time involving parking.

    (closes issue #13794)
    Reported by: davidw
    Patches:
          13794.patch uploaded by murf (license 17)
          13794.patch.160 uploaded by murf (license 17)
    Tested by: murf, dbrooks
  ........
................

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

main/features.c

index b4bc91646a611b35f4dfed0bff699255f398e90e..04e987b3e26f2644e8030c7977fa1d5dae0e53b2 100644 (file)
@@ -2493,7 +2493,16 @@ int ast_bridge_call(struct ast_channel *chan,struct ast_channel *peer,struct ast
                   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;
                        bridge_cdr->disposition = peer_cdr->disposition;
                        if (chan_cdr) {