1. 12 May, 2016 1 commit
  2. 27 Feb, 2016 6 commits
  3. 26 Feb, 2016 4 commits
    • Nick Mathewson's avatar
      Branch-complete tests for timeouts_next() · 3c533b61
      Nick Mathewson authored
      3c533b61
    • Nick Mathewson's avatar
      Make the tests cover timeout_readd() better · d6b1d966
      Nick Mathewson authored
      Also, make them check the required invariants for to->expires after
      timeout_readd().
      
      Also, actually use the different timeout values in the main()
      function (whoops).
      d6b1d966
    • Nick Mathewson's avatar
      Correct and simplify timeouts_readd() · d00a3762
      Nick Mathewson authored
      William Ahern tells me that the intent here is that timeout_readd()
      should always reschedule the timeout at the first time in the future
      that is an even multiple of to->interval, as if we had called:
      
               do {
                       to->expires += to->interval;
               } while (to->expires <= T->curtime);
      
      But of course, that's not efficient.  The implementation strategy
      used in this patch simplifies the calculation down to a single %
      operation, plus a few additions and subtractions.
      
      To verify the correctness of the formula used here, note first that
              0 <= r < to->interval, and so
              0 < to->interval - r <= to->interval.  Since
              expires' = curtime + (interval - r),
              curtime < expires' <= curtime + interval,
      and so the new expiration time is no more than one interval after
      curtime.
      
      Note second that since
              r = (curtime - expires) % interval,
              expires' = curtime + (interval - r), we have
              (expires' - expires) % interval =
                  (curtime + (interval - r) - expires) % interval =
                  (curtime - r - expires) % interval =
                  (curtime - (curtime-expires) % interval - expires) % interval =
                  (curtime - curtime + expires - expires) % interval =
                  0.
      And so the new expiration time is an even multiple of interval from
      the original expiration time.
      
      Since we have both properties we wanted, this formula should be right.
      d00a3762
    • William Ahern's avatar
  4. 24 Feb, 2016 18 commits
  5. 23 Feb, 2016 5 commits
  6. 22 Feb, 2016 4 commits
  7. 20 Feb, 2016 1 commit
  8. 19 Feb, 2016 1 commit
    • Nick Mathewson's avatar
      Port timeout.c to platforms without __builtin_c[tl]z · 7311ebae
      Nick Mathewson authored
      This patch includes an intrinsic implementation for these functions
      when the compiler is GCC, Clang, or MSVC--or if the compiler claims
      to be one of those.  Otherwise, a naive implementation is used.
      
      Tests are included for all of these functions, which turned up a
      possible problem: according to the gcc documentation, __builtin_ctz
      and __builtin_clz give an undefined result when their inputs is
      zero.  I was not able to persuade myself that we always called them
      with a nonzero argument.
      7311ebae